基于机器视觉的数字识别技术研究及实现*
2019-11-29王冉孟磊
王冉,孟磊
(西安职业技术学院,陕西 西安 710077)
前言
随着城市人口的增加,学校、医院、社区、商场等人流量比较大场合,安全问题成为重点的研究方向,视频监控成为主流趋势,视频监控的关键技术之一即为物体及人体检测及识别,本文就识别技术中的图像处理、视频流处理、数字识别等关键技术加以分析和验证。
1 相关技术及软件介绍
图像识别技术主要针对获取的图片进行:(1)图片的获取(2)样本图片及非样本图片的分类(3)图片的预处理(4)特征提取(5)建立模型对图片中的目标物体(本文所列举的就是手写数字)进行识别。本文应用的软件包括Pycharm、Anaconda 等,应用到的库包括python3.6、numpy、tensorboard、tensorflow 等。
2 图片处理技术
2.1 图形绘制
图形绘制可以使用import<库名>as<库别名>,代码如下:
import cv2
import numpy as np
newtInfo=(500,500,3)
dst=np.zeros(newtInfo,np.uint8)
cv2.rectangle(dst,(50,100),(200,300),(0,0,255),-1)
cv2.circle(dst,(250,250),(50),(255,0,0),2)
cv2.ellipse(dst,(256,256),(150,100),0,0,180,(0,2 55,0),-1)
points = np.array([[150,50],[140,140],[200,170], [250,250],[150,50]])
points = points.reshape((-1,1,2))
cv2.polylines(dst,[points],True,(0,255,255),5)
cv2.imshow("tutu",dst)
cv2.waitKey(0)
绘制图形效果如图1 所示。
图1 绘制图形示例
2.2 图片边缘检测技术
边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点,本文中图片边缘检测代码如下:
import cv2
import numpy as np
img = cv2.imread("q.jpeg",1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
dst = cv2.Canny(img,50,50)
cv2.imshow("dst",dst)
cv2.waitKey(0)
检测的样本图形为图2,经过处理的图形为图3。
图2 图片边缘检测原图
图3 图片边缘检测示例
3 视频流的提取及处理技术
3.1 视频流的获取
视频的获取有很多种方法,网络获取、自由拍摄,为了测试的准确性需要视频尽可能的清晰,将获取的视频再进行分解为图片,就可以获取测试所需要的样本。
3.2 视频流分解为图片
视频流分解为图片的代码如下:
import cv2
cap = cv2.VideoCapture("q.mp4")
isOpened = cap.isOpened
print(isOpened)
fps = cap.get(cv2.CAP_PROP_FPS)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
print(fps,width,height)
i = 0
while(isOpened):
if i == 13:
break;
else:
i = i+1
fileName = "image"+str(i)+".jpg"
print(fileName)
if flag == True:
cv2.imwrite(fileName, [cv2.IMWRITE_JPEG_QUALITY, 100])
print("end")
其运行结果即将视频分解为13 张待测试的图片,在某些情况下也需要将图片合成为视频。
4 数字识别技术
4.1 建立训练集和测试集
在做数据的训练前,应该找出测试集,MNIST 可以帮助我们完成这项任务。为了测试的速度和准确率,在识别手写数字是0~9 中的某一个数前,先设定识别数字“5”和非“5。
4.2 分类器设置
MNIST 数据集是手写0 到9 的灰度图像,输入图像数据28 * 28 的灰度图,形状是[1, 28, 28],如果图像是32*32 的彩色图,那么输入的形状是[3,32,32],因为灰度图只有一个通道,而彩色图有RGB 三个通道。
4.3 提高准确率
例如要识别数字“5”,出现以下请况(1)将数字“5”识别为数字“5”;(2)将其他数字识别为数字“5”,“3”“6”“8”这些和“5”相近的数字都有可能被识别为数字“5”;(3)将数字“5”没有识别出来,这种错误的原因就是将所有类似“5”的数字划分为非“5”。经过分析,在数字识别的过程中,尽可能的识别为真,进而再根据易混淆数字的特征进行下一级分类器的设置,进而提高分析的准确率。
5 总结
为了智能识别数字本文进行了研究和测试,为进一步研究如何统计高密度人群提供研究基础,研究教师、实验室、医院、幼儿园等的人口数量,以及外来人口检测实现智能监控及预警是我们下一步的研究工作。