识别_识别器 - CSDN
  • 先后就读于华中科技大学、中国科学院,先后就职于奇虎360AI研究院,陌陌深度学习实验室,6年计算机视觉从业经验,拥有丰富的传统图像算法和深度学习图像项目经验,著有畅销书《深度学习之图像识别:核心技术与案例...
  • 本课程主要向大家讲解如何基于YOLO网络的精简版本tiny-yolo训练手势识别模型,从图片数据采集,图片标注,网络参数修改,模型训练,模型测试等,项目中用到的标注好的数据集和训练好的模型向购买课程的同学免费提供...
  • opencv 实时识别指定物体 一. 引入  opencv人脸识别大家应该都听说过,本篇目的是利用opencv从视频帧中识别指定的物体,并框出来,且可以保存截取到的物体图片,会将整个流程都讲一下,包括训练自己的分类器,使用...

    opencv 实时识别指定物体

    一. 引入

        opencv人脸识别大家应该都听说过,本篇目的是利用opencv从视频帧中识别指定的物体,并框出来,且可以保存截取到的物体图片,会将整个流程都讲一下,包括训练自己的分类器,使用训练好的分类器进行识别。这里以识别舌头为例。


    二.  环境:

        1.  python 3.6.3
        2. opencv 3.4.0

    三. 训练自己的分类器


    1. 注意点:训练集分为正样本,负样本,样本全部为灰度图片,正样本图片尺寸需要固定,一般40*40左右即可,大了电脑跑不动,负样本尺寸不固定,负样本数量要比正样本多才行,少了有问题。
    图片批量缩小工具下载:链接:https://pan.baidu.com/s/1pMAp19p 密码:vpp1
    图片批量灰度处理:使用美图秀秀

    2. 正样本制作,使用美图秀秀将舌头的图片全部裁剪出来(尺寸一致为:40*40的),保存到一个文件夹pos中,当然可以先用大尺寸正方形框进行裁剪,然后再用图片缩小工具进行制定尺寸缩小。最后再用美图秀秀批量灰度化。
    附上名字自动有序化Java代码:
    String path = "C:\\Users\\Administrator\\Desktop\\pos\\";
    		File f = new File(path);
    		File[] files = f.listFiles();
    		for (File file : files) {
    			i++;
    			file.renameTo(new File(path+i+"."+file.getName().split("\\.")[1]));
    		}
    处理后得到如下所示图片:

    3. 负样本制作:如上操作类似,不过这里不要求尺寸一样,但是负样本图片中一定不要包含待识别的区域(如这里的:舌头)
    如下所示:



    4. 生成样本资源记录文件:

    a. 正样本资源记录文件

    新建pos文件夹,将正样本的灰度图拷贝进去
    使用JAVA代码生成正样本资源记录文件:
    String path = "E:\\tools\\python\\eclipse\\work\\pythonTest\\demo\\0202\\img\\train\\tongue\\pos\\";
    		File txtfile = new File(path+"pos.txt");
    		FileOutputStream fos = new FileOutputStream(txtfile);
    		PrintWriter pw = new PrintWriter(fos,true);
    		String s = "";
    		File[] files = new File(path).listFiles();
    		for (File file : files) {
    			pw.println("pos/"+file.getName()+" 1 0 0 40 40");
    		}
    生成后删除最后一行的带有(pos.txt)的内容,让正样本资源记录文件内容如下类似所示:


    (1 0 0 40 40)分别指代: 数量  左上方的坐标位置(x,y)  右下方的坐标位置(x,y)
    处理好后,将pos.txt 移动到上一级文件夹


    b. 负样本资源记录文件

    新建neg文件夹,将负样本的灰度图拷贝进去
    使用JAVA代码生成负样本资源记录文件:
    String path = "E:\\tools\\python\\eclipse\\work\\pythonTest\\demo\\0202\\img\\train\\tongue\\neg\\";
    		File txtfile = new File(path+"neg.txt");
    		FileOutputStream fos = new FileOutputStream(txtfile);
    		PrintWriter pw = new PrintWriter(fos,true);
    		String s = "";
    		File[] files = new File(path).listFiles();
    		for (File file : files) {
    			pw.println("neg/"+file.getName());
    			
    		}
    生成后删除最后一行的带有(neg.txt)的内容,让负样本资源记录文件内容如下类似所示:


    处理好后,将negtxt 移动到上一级文件夹

    得到如图所示文件夹结构:



    5. 使用opencv提供的opencv_createsamples.exe程序生成样本vec文件,新建批处理文件:createsamples.bat
    内容如下:

    opencv_createsamples.exe -vec pos.vec -info pos.txt -num 25 -w 40 -h 40
    pause
    说明:25是正样本图片的数量   40 40 是正样本图片的宽高

    这些参数的详细解释:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/user_guide/ug_traincascade.html

    运行后会生成 pos.vec文件


    6. 使用opencv提供的opencv_traincascade.exe程序训练分类器,新建xml文件夹,再新建批处理文件:LBP_train.bat
    内容如下:

    opencv_traincascade.exe -data xml -vec pos.vec -bg neg.txt -numPos 25 -numNeg 666 -numStages 10 -w 40 -h 40 -minHitRate 0.999 -maxFalseAlarmRate 0.2 -weightTrimRate 0.95 -featureType LBP
    pause
    说明: 25是正样本图片的数量   666是负样本图片的数量   numNeg是层级数  40 40是训练样本的宽高 .....
    具体参数解释请查看文档:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/user_guide/ug_traincascade.html

    运行后会在xml文件夹生成如下文件:


    其中cascade.xml是我们需要使用的分类器


    四 . 测试训练好的分类器


    '''
    Created on 2018年2月2日
    实时人脸检测
    @author: nuohy
    '''
    import cv2
    
    # 加载opencv自带的人脸分类器
    # faceCascade = cv2.CascadeClassifier("haarcascade_frontalface_alt2.xml")
    # faceCascade.load('E:/python/opencv/opencv/sources/data/haarcascades/haarcascade_frontalface_alt2.xml')
    
    faceCascade = cv2.CascadeClassifier("cascade.xml")
    faceCascade.load('E:/tools/python/eclipse/work/pythonTest/demo/0202/img/train/tongue/xml/cascade.xml')
    
    cap = cv2.VideoCapture(0)
    flag = 0
    timeF = 10
    while True:
        flag+=1
        ret, frame = cap.read()
        img = frame.copy()
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        rect = faceCascade.detectMultiScale(
            gray,
            scaleFactor=1.15,
            minNeighbors=3,
            minSize=(3,3),
            flags = cv2.IMREAD_GRAYSCALE
        )
        for (x, y, w, h) in rect:
            cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
            #识别到物体后进行裁剪保存
            #jiequ = img[x:(x+w), y:(y+h)]
            #cv2.imwrite('E://tools//python//eclipse//work//pythonTest//demo//0202//img//save//'+str(flag) + '.jpg',jiequ) #save as jpg
    
        #读取到保存图片
    #     if(flag%timeF==0):
    #         cv2.imwrite('E://tools//python//eclipse//work//pythonTest//demo//0202//img//save//'+str(flag) + '.jpg',frame) #save as jpg
    
    
        cv2.imshow('frame', frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    cap.release()
    cv2.destroyAllWindows()

     效果图如下所示:




    所有需要用到的文件下载地址:  http://download.csdn.net/download/qq_27063119/10238488  
    (需要5积分,没有的至我邮箱 nuohy@qq.com)




    展开全文
  • 图像识别过程分为图像处理和图像识别两个部分。 图像处理(imageProcessing)利用计算机对图像进行分析,以达到所需的结果。 图像处理可分为模拟图像处理和数字图像处理,而图像处理一般指数字图像处理。 这种处理...

    图像识别过程分为图像处理图像识别两个部分。
    图像识别流程程
    图像处理(imageProcessing)利用计算机对图像进行分析,以达到所需的结果。
    图像处理可分为模拟图像处理数字图像处理,而图像处理一般指数字图像处理
    这种处理大多数是依赖于软件实现的。
    其目的是去除干扰、噪声,将原始图像编程适于计算机进行特征提取的形式,主要包括图像采样图像增强图像复原图像编码与压缩图像分割

    1)图像采集
    图像采集是数字图像数据提取的主要方式。数字图像主要借助于数字摄像机、扫描仪、数码相机等设备经过采样数字化得到的图像,也包括一些动态图像,并可以将其转为数字图像,和文字、图形、声音一起存储在计算机内,显示在计算机的屏幕上。图像的提取是将一个图像变换为适合计算机处理的形式的第一步。

    2)图像增强
    图像在成像、采集、传输、复制等过程中图像的质量或多或少会造成一定的退化,数字化后的图像视觉效果不是十分满意。为了突出图像中感兴趣的部分,使图像的主体结构更加明确,必须对图像进行改善,即图像增强。通过图像增强,以减少图像中的图像的噪声,改变原来图像的亮度、色彩分布、对比度等参数。图像增强提高了图像的清晰度、图像的质量,使图像中的物体的轮廓更加清晰,细节更加明显。图像增强不考虑图像降质的原因,增强后的图像更加赏欣悦目,为后期的图像分析和图像理解奠定基础。

    3)图像复原
    图像复原也称图像恢复,由于在获取图像时环境噪声的影响、运动造成的图像模糊、光线的强弱等原因使得图像模糊,为了提取比较清晰的图像需要对图像进行恢复,图像恢复主要采用滤波方法,从降质的图像恢复原始图。图像复原的另一种特殊技术是图像重建,该技术是从物体横剖面的一组投影数据建立图像。

    4)图像编码与压缩
    数字图像的显著特点是数据量庞大,需要占用相当大的存储空间。但基于计算机的网络带宽和的大容量存储器无法进行数据图像的处理、存储、传输。为了能快速方便地在网络环境下传输图像或视频,那么必须对图像进行编码和压缩。目前,图像压缩编码已形成国际标准,如比较著名的静态图像压缩标准JPEG,该标准主要针对图像的分辨率、彩色图像和灰度图像,适用于网络传输的数码相片、彩色照片等方面。由于视频可以被看作是一幅幅不同的但有紧密相关的静态图像的时间序列,因此动态视频的单帧图像压缩可以应用静态图像的压缩标准。图像编码压缩技术可以减少图像的冗余数据量和存储器容量、提高图像传输速度、缩短处理时间。

    5)图像分割技术
    图像分割是把图像分成一些互不重叠而又具有各自特征的子区域,每一区域是像素的一个连续集,这里的特性可以是图像的颜色、形状、灰度和纹理等。图像分割根据目标与背景的先验知识将图像表示为物理上有意义的连通区域的集合。即对图像中的目标、背景进行标记、定位,然后把目标从背景中分离出来。目前,图像分割的方法主要有基于区域特征的分割方法、基于相关匹配的分割方法和基于边界特征的分割方法。由于采集图像时会受到各种条件的影响会是图像变的模糊、噪声干扰,使得图像分割是会遇到困难。在实际的图像中需根据景物条件的不同选择适合的图像分割方法。图像分割为进一步的图像识别、分析和理解奠定了基础。

    图像识别将图像处理得到的图像进行特征提取和分类。识别方法中基本的也是常用的方法有统计法(或决策理论法)、句法(或结构)方法神经网络法模板匹配法几何变换法

    1)统计法(StatisticMethod)
    该方法是对研究的图像进行大量的统计分析,找出其中的规律并提取反映图像本质特点的特征来进行图像识别的。它以数学上的决策理论为基础,建立统计学识别模型,因而是一种分类误差最小的方法。常用的图像统计模型有贝叶斯(Bayes)模型和马尔柯夫(Markow)随机场(MRF)模型。但是,较为常用的贝叶斯决策规则虽然从理论上解决了最优分类器的设计问题,其应用却在很大程度受到了更为困难的概率密度估计问题的限制。同时,正是因为统计方法基于严格的数学基础,而忽略了被识别图像的空间结构关系,当图像非常复杂、类别数很多时,将导致特征数量的激增,给特征提取造成困难,也使分类难以实现。尤其是当被识别图像(如指纹、染色体等)的主要特征是结构特征时,用统计法就很难进行识别。

    2)句法识别法(Syntactic Recognition)
    该方法是对统计识别方法的补充,在用统计法对图像进行识别时,图像的特征是用数值特征描述的,而句法方法则是用符号来描述图像特征的。它模仿了语言学中句法的层次结构,采用分层描述的方法,把复杂图像分解为单层或多层的相对简单的子图像,主要突出被识别对象的空间结构关系信息。模式识别源于统计方法,而句法方法则扩大了模式识别的能力,使其不仅能用于对图像的分类,而且可以用于对景物的分析与物体结构的识别。但是,当存在较大的干扰和噪声时,句法识别方法抽取子图像(基元)困难,容易产生误判率,难以满足分类识别精度和可靠度的要求。

    3)神经网络方法(NeuralNetwork)
    该方法是指用神经网络算法对图像进行识别的方法。神经网络系统是由大量的,同时也是很简单的处理单元(称为神经元),通过广泛地按照某种方式相互连接而形成的复杂网络系统,虽然每个神经元的结构和功能十分简单,但由大量的神经元构成的网络系统的行为却是丰富多彩和十分复杂的。它反映了人脑功能的许多基本特征,是人脑神经网络系统的简化、抽象和模拟。句法方法侧重于模拟人的逻辑思维,而神经网络侧重于模拟和实现人的认知过程中的感知觉过程、形象思维、分布式记忆和自学习自组织过程,与符号处理是一种互补的关系。由于神经网络具有非线性映射逼近、大规模并行分布式存储和综合优化处理、容错性强、独特的联想记忆及自组织、自适应和自学习能力,因而特别适合处理需要同时考虑许多因素和条件的问题以及信息不确定性(模糊或不精确)问题。在实际应用中,由于神经网络法存在收敛速度慢、训练量大、训练时间长,且存在局部最小,识别分类精度不够,难以适用于经常出现新模式的场合,因而其实用性有待进一步提高。

    4)模板匹配法(TemplateMatching)
    它是一种最基本的图像识别方法。所谓模板是为了检测待识别图像的某些区域特征而设计的阵列,它既可以是数字量,也可以是符号串等,因此可以把它看为统计法或句法的一种特例。所谓模板匹配法就是把已知物体的模板与图像中所有未知物体进行比较,如果某一未知物体与该模板匹配,则该物体被检测出来,并被认为是与模板相同的物体。模板匹配法虽然简单方便,但其应用有一定的限制。因为要表明所有物体的各种方向及尺寸,就需要较大数量的模板,且其匹配过程由于需要的存储量和计算量过大而不经济。同时,该方法的识别率过多地依赖于已知物体的模板,如果已知物体的模板产生变形,会导致错误的识别。此外,由于图像存在噪声以及被检测物体形状和结构方面的不确定性,模板匹配法在较复杂的情况下往往得不到理想的效果,难以绝对精确,一般都要在图像的每一点上求模板与图像之间的匹配量度,凡是匹配量度达到某一阈值的地方,表示该图像中存在所要检测的物体。经典的图像匹配方法利用互相关计算匹配量度,或用绝对差的平方和作为不匹配量度,但是这两种方法经常发生不匹配的情况,因此,利用几何变换的匹配方法有助于提高稳健性。

    5)典型的几何变换方法主要有霍夫变换HT (Hough Transform)
    霍夫变换是一种快速形状匹配技术,它对图像进行某种形式的变换,把图像中给定形状曲线上的所有点变换到霍夫空间,而形成峰点,这样,给定形状的曲线检测问题就变换为霍夫空间中峰点的检测问题,可以用于有缺损形状的检测,是一种鲁棒性(Robust)很强的方法。为了减少计算量和和内存空间以提高计算效率,又提出了改进的霍夫算法,如快速霍夫变换(FHT)、自适应霍夫变换(AHT)及随机霍夫变换(RHT)。其中随机霍夫变换RHT(RandomizedHough Transform)是20世纪90年代提出的一种精巧的变换算法,其突出特点不仅能有效地减少计算量和内存容量,提高计算效率,而且能在有限的变换空间获得任意高的分辨率。

    展开全文
  • 模式识别-车牌识别

    2020-07-27 23:33:58
    车牌识别系统是的核心技术之一,它主要包括车牌定位、字符分割和字符识别三个核心模块。随着安防视频步入高清时代,视频的分辨率越来越高,智能交通系统对车牌识别技术有了更高的要求:处理速度更快、环境适应性更强...
  • 车辆检测识别(YOLOV2)

    2018-07-26 19:04:05
    代码地址:yang1688899/Vehicle-Detection-YOLO-keras YOLO简介: YOLO意为 You Only Look Once,是一种基于深度学习的端对端(end to end)物体检测方法.与R-CNN,Fast-R-CNN,Faster-R-CNN等通过region proposal...

     

    代码地址:yang1688899/Vehicle-Detection-YOLO-keras

    YOLO简介:

    YOLO意为 You Only Look Once,是一种基于深度学习的端对端(end to end)物体检测方法.与R-CNN,Fast-R-CNN,Faster-R-CNN等通过region proposal产生大量的可能包含待检测物体的 potential bounding box,再用分类器去判断每个 bounding box里是否包含有物体,以及物体所属类别的方法不同,YOLO将物体检测任务当做一个regression问题来处理.

    YOLO检测思路:

    (这里以输入为416x416的YOLOV2为例)

    首先将图片划分为13x13个栅格(grid cell):

     

     

    每个栅格负责预测5个bounding box(bounding box包括中心点坐标x,y及其宽w,高h,共4个值)。对于每个bounding box预测其是否包含物体的confidence score(1个值),及其所包含物体class的possibility分布(由于有20个class,这里有20个值)。最终模型的的输出为13x13x125.这里13x13对应13x13个栅格(grid cell).每个bounding box 一共有4+1+20=25个值,每个栅格检测5个bounding box,则有每个栅格对应5x25=125个值,因此13x13x125.

    以下为每个栅格的对应输出:

     

     

    模型最终检测到13x13x5=845个bounding box把所有的bounding box都画到原图上可能会是这样子的:

     

     

    大多数的bounding box 的confidence score都是非常低的(也就是没有检测到物体的),只要少数的bounding box 是高confidence score的,检测到物体的。通过confidence score与最大的class的possibility相乘可以得到该bounding box 包含某物体的置信度,对这一置信度进行阈值过滤可以把大部分无意义的bounding box过滤掉。剩下的bounding box 可能存在的多重检测问题(即一个物体被多个bounding box检测)可以用NMS,heatmap等方法进行过滤整合,得到最终检测结果。

    经过过滤处理的检测结果会是这样的:

     

     

    实现步骤

    ps:本来是打算keras构建模型结构,然后加载weights文件训练后了参数实现的,但一直没有搞清楚weights文件的参数是怎么和模型各层对应上,最后找了YAD2K,里面提供了把YOLOV2 weights文件直接转换成keras model文件的方法,就直接拿来用了。

    • 使用YAD2K把weights文件转化为keras的h5文件
    • 使用model预测bounding box
    • 阈值筛选bounding box

    使用YAD2K把weights文件转化为keras的h5文件

    下载相应的YOLO weights和cfg文件:

    weight文件下载;

    获得YAD2K;

    运行yad2k.py文件,参数依次为:cfg文件路径,weights文件路径,model文件输出路径.

    这里使用yolov2-tiny模型的voc版本,运行如下命令:

    python ./yad2k.py ./yolov2-tiny-voc.cfg ./yolov2-tiny-voc.weights ./model/yolov2-tiny-voc.h5
    

    使用model预测bounding box

    这里是一个使用keras的predict_generator对视频进行预测的示例(在内存显存足够的情况下可以直接用predict):

    首先使用opencv读取视频,并进行resize,normalize等预处理:

    #把给定视频转换为图片
    def preprocess_video(src_path):
        cap = cv2.VideoCapture(src_path)
        num_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
        fps = int(cap.get(cv2.CAP_PROP_FPS))
        fourcc = int(cap.get(cv2.CAP_PROP_FOURCC))
        video_frames = []
        for i in range(num_frames):
            ret, frame = cap.read()
            if ret:
                frame = cv2.resize(frame, (416, 416))
                frame = preprocess_image(frame)
                video_frames.append(frame)
        video_frames = np.array(video_frames)
        cap.release()
        return video_frames,num_frames,fps,fourcc
    

    利用yield写一个generator function,用于在预测时生成指定batch_size大小的图片batch:

    #prediction_generator
    def video_batch_gen(video_frames,batch_size=32):
       for offset in range(0,len(video_frames),batch_size):
           yield video_frames[offset:offset+batch_size]
    

    最后加载model,使用predict_generator进行预测:

    video_frames, num_frames, fps, fourcc = utils.preprocess_video(src_path)
    gen = utils.video_batch_gen(video_frames,batch_size=batch_size)
    
    model = load_model("./model/yolov2-tiny-voc.h5")
    
    print("predicting......")
    predictions = model.predict_generator(gen)
    

    阈值筛选bounding box

    得到predictions后,还要对predictions进行进一步处理,目的是过滤掉置信度低的及重叠的bounding box,使得图片的每一个物体对应一个置信度最高的bounding box。 为了方便对predictions进行处理,这里定义一个box类对bounding box的参数进行存储:

    class Box:
        def __init__(self):
            self.w = float()
            self.h = float()
            self.p_max = float()
            self.clas = int()
            self.x1 = int()
            self.y1 = int()
            self.x2 = int()
            self.y2 = int()
    

    模型预测的是bounding box的中心点坐标x,y及其宽w,高h及是否包含物体的confidence score和其所包含物体class的possibility,其中中心点坐标x,y及其宽w,高h都是相对于每个栅格(grid cell)而言的,因此这些参数都需要进行转换。使用confidence score与最大的class的possibility相乘可以得到置信度,对这个置信度进行一些阈值过滤可以过滤掉置信度不高的bounding box:

    prediction = np.reshape(prediction, (n_grid, n_grid, n_box, 5+n_class))
    boxes = []
    for row in range(n_grid):
        for col in range(n_grid):
            for b in range(n_box):
                tx, ty, tw, th, tc = prediction[row, col, b, :5]
                box = Box()
    
                box.w = np.exp(tw) * anchors[2 * b + 0] * 32.0
                box.h = np.exp(th) * anchors[2 * b + 1] * 32.0
    
                c_probs = softmax(prediction[row, col, b, 5:])
                box.clas = np.argmax(c_probs)
                box.p_max = np.max(c_probs) * sigmoid(tc)
    
                center_x = (float(col) + sigmoid(tx)) * 32.0
                center_y = (float(row) + sigmoid(ty)) * 32.0
    
                box.x1 = int(center_x - (box.w / 2.))
                box.x2 = int(center_x + (box.w / 2.))
                box.y1 = int(center_y - (box.h / 2.))
                box.y2 = int(center_y + (box.h / 2.))
    
                if box.p_max > probs_threshold:
                    boxes.append(box)
    

    经过初步处理后的bounding box仍会有大量重叠的情况:

     

     

    这里使用非极大值抑制(NMS)对bounding box进行过滤(ps:也可以使用车辆识别(特征提取+svm分类器)中介绍的heatmap进行过滤,只要达到使每个物体对应一个合适的bounding box的目的):

    #使用non_maxsuppression 筛选box
    def non_maximal_suppression(thresholded_boxes, iou_threshold=0.3):
        nms_boxes = []
        if len(thresholded_boxes) > 0:
            # 添加置信度最高的box
            nms_boxes.append(thresholded_boxes[0])
    
            i = 1
            while i < len(thresholded_boxes):
                n_boxes_to_check = len(nms_boxes)
                to_delete = False
    
                j = 0
                while j < n_boxes_to_check:
                    curr_iou = iou(thresholded_boxes[i], nms_boxes[j])
                    if (curr_iou > iou_threshold):
                        to_delete = True
                    j = j + 1
    
                if to_delete == False:
                    nms_boxes.append(thresholded_boxes[i])
                i = i + 1
    
        return nms_boxes
    

    最后把过滤后的bounding box展示在图片上,以下为示例代码:

    #在图片上画出box
    def draw_boxes(image,boxes):
        for i in range(len(boxes)):
            color = colors[boxes[i].clas]
            best_class_name = classes[boxes[i].clas]
    
            image = cv2.rectangle(image, (boxes[i].x1, boxes[i].y1),
                                        (boxes[i].x2, boxes[i].y2),color)
    
            cv2.putText(
                image, best_class_name + ' : %.2f' % boxes[i].p_max,
                (int(boxes[i].x1 + 5), int(boxes[i].y1 - 7)), cv2.FONT_HERSHEY_SIMPLEX, 0.5,
                color, 1)
    
        return image
    

    结果:

     

    展开全文
  • 文字识别是计算机视觉研究领域的分支之一,归属于模式识别和人工智能,是计算机科学的重要组成部分,本文将以上图为主要线索,简要阐述在文字识别领域中的各个组成部分(更侧重传统非深度学习端到端方案)。...

    文字识别是计算机视觉研究领域的分支之一,归属于模式识别和人工智能,是计算机科学的重要组成部分,本文将以上图为主要线索,简要阐述在文字识别领域中的各个组成部分(更侧重传统非深度学习端到端方案)。

    一 ,文字识别简介

    计算机文字识别,俗称光学字符识别,英文全称是Optical Character Recognition(简称OCR),它是利用光学技术和计算机技术把印在或写在纸上的文字读取出来,并转换成一种计算机能够接受、人又可以理解的格式。OCR技术是实现文字高速录入的一项关键技术。

    在OCR技术中,印刷体文字识别是开展最早,技术上最为成熟的一个。早在1929年德国科学家Taushek就取得了一项光学字符识别(Optical Character Recognition,简称OCR)的专利131。欧美国家为了将浩如烟海、与日俱增的大量报刊杂志、文件资料和单据报表等文字材料输入计算机进行信息处理,从上世纪50年代就开始了西文OCR技术的研究,以便代替人工键盘输入。经过40多年的不断发展和完善,并随着计算机技术的飞速发展,西文OCR技术现已广泛应用于各个领域,使得大量的文字资料能够快速、方便、省时省力和及时地输入到计算机中,实现了信息处理的“电子化”。

    与印刷体西文OCR相比,印刷体汉文OCR技术的研究是在印刷体数字识别和印刷体英文识别的基础上发展起来的,最早可以追溯到上世纪60年代。1966年,BIM公司的Casey和Nagy发表了第一篇关于印刷体汉字识别的论文,在这篇论文中他们利用简单的模板匹配法,识别了1000个印刷体汉字。从上世纪70年代以来,日本学者在汉文OCR方面做了许多研究工作,其中有代表性的系统有1977年东芝综合研究所研制的可以识别2000个单体印刷汉字的识别系统;80年代初期,日本武藏野电气研究所研制的可以识别2300个多体汉字的印刷体汉字识别系统,代表了当时汉字识别的最高水平。此外,日本的三洋、松下、理光和富士等公司也有其研制的印刷体汉字识别系统。这些系统在方法上,大都采用基于K-L数字变换的匹配方案,使用了大量专用硬件,其设备有的相当于小型机甚至大型机,价格极其昂贵,所以并没有得到广泛应用。

    与国外相比,我国的印刷体汉字识别研究是从上世纪70年代末起步的,至今己有近三十年的发展历史,大致可以分成如下三个阶段:

    1)探索阶段(1979一1985)

    在对数字、英文、符号识别研究的基础上,自上世纪70年代末,国内就有少数单位的研究人员对汉字识别方法进行了探索,发表了一些论文,研制了少量模拟识别软件和系统。这个阶段漫长,成果不多,但是却孕育了下一个阶段的丰硕果实。

    2)研制阶段(1986~1988)

    1986年初到1988年底,这三年是汉字识别技术研究的高潮期,也是印刷体汉字识别技术研究的丰收期。总共有11个单位进行了14次印刷体汉字识别的成果鉴定,这些系统对样张识别能达到高指标:可以识别宋体、仿宋体、黑体、楷体,识别的字数最多可达6763个,字号从3号到5号,识别率高达99.5%以上,识别速度在286微机条件下能够达到10~14字/秒,但对真实文本识别率大大下降,这是由于以上系统对印刷体文字形状变化(如文字模糊、笔划粘连、断笔、黑白不均、纸质质量差、油墨反透等等)的适应性和抗干扰性比较差造成的。但是这三年研制的识别系统为印刷体汉字识别系统的实用化打下了基础,是识别系统从研制到实用化必经的过程。

    3)实用阶段(1989一至今)

    印刷体汉字识别自1986年掀起高潮以来,清华大学电子工程系、中国科学院计算所智能中心、北京信息工程学院、沈阳自动化研究所等多家单位分别研制并开发出了实用化的印刷体汉字识别系统。尤其是由清华大学电子工程系研制的清华TH一OCR产品和由汉王集团开发的尚书OCR产品,它们始终都处于技术发展的最前沿,并占据着最大的市场份额,代表着印刷体汉字识别技术的发展潮流。目前,印刷体汉字识别技术的研究热点已经从单纯的文字识别转移到了表格的自动识别与录入,图文混排和多语种混排的版面分析、版面理解和版面恢复,名片识别,金融票据识别和古籍识别等内容上。并且出现了许多相关的识别系统,如:紫光文通推出的名片识别系统(e一card)、身份证识别系统(e验通)和“慧视”屏幕文字图像识别系统等等。这些新的识别系统的出现,标志着印刷体汉字识别技术的应用领域得到了广阔的扩展。

    国家高技术研究发展“863”计划、国家重点科技攻关计划、国家自然科学基金和军事基础研究基金都对印刷体汉字识别这一研究课题予以极大的重视和大力的支持。目前,印刷体汉字识别和联机手写汉字识别走向实用化,其技术水平和当前世界最高水平并驾齐驱。

    这篇文章将对OCR技术进行分类描述,并介绍一些在OCR领域中较常使用的算法,由于个人主要参与的项目实践与印刷体识别较为相关,所以对于其他领域的描述若有不当之处,请大家指正,希望本文的介绍会让大家对OCR的整个流程有一个简要的概念。

    二 ,印刷体文字识别

    OCR技术的兴起便是从印刷体识别开始的,印刷体识别的成功为后来手写体的发展奠定了坚实的基础。印刷体识别的主要流程大致分为以下几个部分:图像预处理;版面处理;图像切分;特征提取、匹配及模型训练、匹配;识别后处理。

    2.1 图像预处理

    输入文本经过扫描仪进入计算机后,由于纸张的厚薄、光洁度和印刷质量都会造成文字畸变,产生断笔、粘连和污点等干扰,所以在进行文字识别之前,要对带有噪声的文字图像进行处理。由于这种处理工作是在文字识别之前,所以被称为预处理。预处理一般包括灰度化、二值化,倾斜检测与校正,行、字切分,平滑,规范化等等。

    2.1.1灰度化

    通过外设采集的图像通常为彩色图像,彩色图像会夹杂一些干扰信息,灰度化处理的主要目的就是滤除这些信息,灰度化的实质其实就是将原本由三维描述的像素点,映射为一维描述的像素点。转换的方式和规则有很多,在这里不详细介绍。

    2.1.2 二值化

    经过灰度处理的彩色图像还需经过二值化处理将文字与背景进一步分离开,所谓二值化,就是将灰度值(或者彩色值)图像信号转化成只有黑(l)和白(0)的二值图像信号。二值化效果的好坏,会直接影响灰度文本图像的识别率。二值化方法大致可以分为局部阈值二值化和整体阈值二值化。目前使用较多的日本学者大津提出的“大津法”

    2.1.3倾斜校正

    印刷体文本资料大多是由平行于页面边缘的水平(或者垂直)的文本行(或者列)组成的,即倾斜角度为零度。然而在文本页面扫描过程中,不论是手工扫描还是机器扫描,都不可避免地会出现图像倾斜现象。而倾斜的文档图像对后期的字符分割、识别和图像压缩等工作将产生很大影响。为了保证后续处理的正确性,对文本图像进行倾斜检测和校正是十分必要的。

    文本图像的倾斜校正分为手动校正和自动校正两种。手动校正,是指识别系统提供某种人机交互手段,实现文本图像的倾斜校正。自动校正,是指由计算机自动分析文本图像的版面特征,估计图像的倾斜角度,并根据倾斜角度对文本图像进行校正。

    目前,文本图像的倾斜检测方法有许多种,主要可以划分为以下五类:基于投影图的方法,基于Hough变换的方法,基于交叉相关性的方法,基于Fourier变换的方法和基于最近邻聚类方法。

    最简单的基于投影图的方法是将文本图像沿不同方向进行投影。当投影方向和文字行方向一致时,文字行在投影图上的峰值最大,并且投影图存在明显的峰谷,此时的投影方向就是倾斜角度。

    Huogh变换也是一种最常用的倾斜检测方法,它是利用Hough变换的特性,将图像中的前景像素映射到极坐标空间,通过统计极坐标空间各点的累加值得到文档图像的倾斜角度。

    Fourier变换的方法是利用页面倾角对应于使Fourier空间密度最大的方向角的特性,将文档图像的所有像素点进行Fourier变换。这种方法的计算量非常大,目前很少采用。

    基于最近邻聚类方法,取文本图像的某个子区域中字符连通域的中心点作为特征点,利用基线上的点的连续性,计算出对应的文本行的方向角,从而得到整个页面的倾斜角。

    2.1.4规范化

    规范化操作就是将输入的任意尺寸的文字都处理成统一尺寸的标准文字,以便与己经预先存储在字典中的参考模板相匹配。规范化操作包括1211:位置规范化、大小规范化以及笔划粗细规范化。在本节只讨论位置规范化和大小规范化。

    为了消除文字点阵位置上的偏差,需要把整个文字点阵图移动到规定的位置上,这个过程被称为位置规范化。常用的位置规范化操作有两种,一种是基于质心的位置规范化,另一种是基于文字外边框的位置规范化。基于文字外边框的位置规范化需要首先计算文字的外边框,并找出中心,然后把文字中心移动到指定的位置上来。基于质心的位置规范化方法抗干扰能力比基于文字外边框的位置规范化方法要强。

    使用基于文字外边框的位置规范化方法对文字进行位置规范化的操作结果,如下图所示。

    对不同大小的文字做变换,使之成为同一尺寸大小,这个过程被称为大小规范化。很多已有的多字号印刷体识别系统都是通过大小规范化来识别不同字号的文字。常用的大小规范化操作也有两种,一种是将文字的外边框按比例线性放大或缩小成规定尺寸的文字,另一种是根据水平和垂直两个方向上文字黑像素的分布情况进行大小规范化。

    使用根据水平和垂直两个方向上文字黑像素的分布情况方法对文字进行大小规范化操作的效果,如下图所示。

    2.1.5图像平滑

    文本图像经过平滑处理之后,能够去掉笔划上的孤立白点和笔划外部的孤立黑点,以及笔划边缘的凹凸点,使得笔划边缘变得平滑。一种简单的平滑处理方法如下。采用NxN窗口(N一般为3,如图2-1所示是一个3X3窗口),依次在二值文字点阵中进行扫描,根据窗口中黑白像素的分布情况,使处于窗口中心的被平滑像素X,从“0”变成“1”或者从“l”变成“0”。

    该方法是按以下规则对文字轮廓边缘进行平滑的。

    规则1如果满足图2-2中(a),(b),(c),(d)四种情况中的任何一种,则中心点应该由“0”变成“l”。

    规则2如果满足图2-2中(e),(f),(g),(h)四种情况中的任何一种,则中心点应该由“1”变成“0”。

    2.2版面处理

    通常版面处理分为三个主要部分,版面分析、版面理解、版面重构。

    2.2.1版面分析

    将文本图像分割为不同部分,并标定各部分属性,如:文本、图像、表格。目前在版面分析方面的工作核心思想都是基于连通域分析法,后衍生出的基于神经网络的版面分析法等也都是以连通域为基础进行的。连通域是指将图像经过二值化后转为的二值矩阵中任选一个像素点,若包围其的所有像素点中存在相同像素值的像素点则视为两点连通,以此类推,这样的像素点构成的一个集合在图像中所在的区域即一个连通域。根据连通域大小或像素点分布等特征可以将连通域的属性标记出来,用作进一步处理的依据。

    2.2.2版面理解

    获取文章逻辑结构,包括各区域的逻辑属性、文章的层次关系和阅读顺序。根据版面分析时记载的连通域位置信息,确定连通域归属序列。

    2.2.3版面重构

    根据版面分析和OCR的结果,重构出包含文字信息和版面信息的电子文档。

    2.3 图像切分

    图像切分大致可以分为两个个主要类别,行(列)切分和字切分。经过切分处理后,才能方便对单个文字进行识别处理。如下图所示。

    2.3.1 行列切分

    由于印刷体文字图像行列间距.、字间距大致相等,且几乎不存在粘连现象,所以可以采用投影法对图像进行切分,得到每列(行)在坐标轴的像素值投影曲线是一个不平滑的曲线,通过高斯平滑后的曲线在每个波谷位置间的区域即为要的一行(列)。

    2.3.2 字切分

    字切分对于不同的文种存在着比较明显的差异,通常意义下,字切分是指将整行或整列文字切分成独立的一个个文字,而实际上根据文种差异,可能还需需要将单个文字进行进一步切分。而因为文种不同,构词法或钩字法也有所不同,所以切分方法的难度差别也是天壤之别。例如将汉字“屋”切分开的难度和将英文“house”切分开的难度差别就很大,因此在识别模式上,也会根据文种特性,设计不同的识别方法。

    2.4 特征提取与模型训练

    在深度学习广泛应用于图像识别领域之前,模板匹配是较为常见的一种识别方式,之后由于神经网络的复苏,基于反馈的神经网络给OCR领域带来了又一春。现在随着计算机硬件算力的提升,利用大批数据训练深度神经网络在图像识别方面取得了傲人的成绩。

    2.4.1 特征提取及匹配

    特征提取是从单个字符图像上提取统计特征或结构特征的过程。所提取的特征的稳定性及有效性,决定了识别的性能。对于统计特征的提取,可利用统计模式识别中的特征提取方法,而对结构特征的提取,应根据具体文字所确定的识别基元确定相应的特征提取方法。在相当长的文字识别的研究过程中,是利用人们的经验知识,指导文字特征的提取。例如边缘特征、变换特征、穿透特征、网格特征、特征点特征、方向线素特征等等。

    特征匹配是从已有的特征库中找到与待识别文字相似度最高的文字的过程。当待识别文字提取完特征之后,不管使用的是统计特征,还是结构特征,都需要有一个特征库来进行比对,特征库中应包含欲识别字符集中所有文字的特征。特征匹配的方法有很多,比较常用的有:欧式空间的比对法、松弛比对法、动态程序比对法以及HMM(HiddneMarkovModel)法等等。在神经网络出现之前以及之后很长一段时间,在汉字OCR领域,一直采用的就是这种模板匹配的方法。

    2.4.2 模型训练

    人工神经网络经过一段时间的发展在OCR中主要充当了分类器的作用,网络的输入为文字特征向量,输出是类编码,在识别类型较少且结构区分较为明显的文字识别中,特征向量通常为字符图像像素点的矩阵,这样特征提取相当于是一个黑盒的操作,对于原理的解释有很多,这里不做详细介绍。深度学习已经成功应用于OCR领域,深度学习的发展替代了繁重的特征工程,从大量标记预料中自动学习出图像的特征,其中CNN(卷积神经网络)尤为抢眼,除了省去人工特征提取的流程外,共享权值的方式也减少了权值数量,大幅减少了计算开销,它的两大优势使得CNN在OCR领域表现十分卓越。

    2.4.3 识别方式

    随着用户数量及需求的增加,识别效率也成为OCR工程化的一项重要指标。传统方法,会对服务器性能要求较高,这样使得投入成本较高且不易扩展;在Hadoop出现之后,该问题得到了较好的改善,通过MapReduce编程框架,使得企业需要为之投入的硬件成本大幅减少,对OCR的发展提供了有力的推动作用。

    2.5 识别后处理

    识别后处理主要应用于两个方面分别是版面恢复及识别校正。版面恢复在版面处理章节已经讲过,这里不再赘述。识别校正,主要方式是在识别结果基础上根据语种的语言模型进行,当然在单文种识别中相对容易一些,而在多语种则较为复杂。

    三,手写体文字识别

    手写体识别较印刷体识别难度较高,而在手写体识别中脱机手写体识别难度又比联机手写体识别高。这也是脱机手写体识别还未成功应用的主要原因。

    联机手写体文字识别(on-line handwritten character recognition)又被称为实时(或者在线)手写体识别,即:人在书写文字的同时,机器根据所书写文字的笔划、笔顺等特征进行识别。联机手写体文字识别是依靠电磁式或压电式等手写输入板来完成的,当用户使用光笔在输入板上写字的时候,光笔在板上的运动轨迹(板上的坐标)会被转化为一系列的电信号,这些电信号能够串行地输入到计算机中,从这些电信号我们可以比较容易地抽取笔划和笔顺的信息,从而进行文字识别。从上世纪90年代以来,联机手写体文字识别正逐步走向实用。中国的科研工作者推出了多个联机手写体汉字识别系统,国外的一些大公司也开始进入这一市场。这一技术也迎合了PDA(Personal Digital Assistant)的发展潮流。

    脱机手写体文字识别(off-line handwritten character recognition)又被称为离线手写体文字识别:由书写者预先将文字写在纸上,然后通过扫描仪转换成文字图像,再由计算机识别成相应文字。由于每个人书写习惯的不同,所以脱机手写体文字的类型是多种多样的,而且既便同一个人在不同情况下写出来的文字也会有变化,这些都给脱机手写体文字识别带来了巨大的困难。对于脱机手写体文字识别而言,如果对文字的书写不加以任何限制(即自由手写体文字),则识别难度相当大。

    对于脱机手写体文字识别处理流程和技术手段大致和印刷体识别相似,但是由于手写体随意性较大,因此对文字图像的行列切分、字切分带来了较大的困难,根据文种不同,切分的方法也有所不同,例如:在手写体蒙古文字中内蒙古大学的研究学者采用了一种基于字符外接多边形的寻找切分点的字切分算法,取得了不错的切分效果。

    对于联机手写体识别的处理流程,主要是利用笔划顺序作为序列模型,加上字符结构特征、笔顺方向特征、笔画数量特征作为空间模型,的组合式模型,完成识别任务。

    四,应用案例

    4.1印刷体识别应用

    印刷体识别引用扩展较多,且技术发展较为成熟,无论在识别准确率方面还是在识别效率方面,都达到了较高的标准。

    4.1.1车牌识别

    车牌识别系统是OCR工业化应用较早而且成功的典型案例,如今从停车场到小区门禁,车牌识别技术已走进生活的各个角落。车牌识别的成功,归结为以下几个原因;

    1、识别内容是封闭集合,且集合较小

    2、文字字体、大小较为规范

    3、文字间距均匀,噪音较少

    4.1.2 Tesseract

    Tesseract的OCR引擎最先由HP实验室于1985年开始研发,至1995年时已经成为OCR业内最准确的三款识别引擎之一。然而,HP不久便决定放弃OCR业务,Tesseract也从此尘封。

    数年以后,HP意识到,与其将Tesseract束之高阁,不如贡献给开源软件业,让其重焕新生--2005年,Tesseract由美国内华达州信息技术研究所获得,并求诸于Google对Tesseract进行改进、消除Bug、优化工作。

    Tesseract目前已作为开源项目发布在Google Project,其最新版本3.0已经支持中文OCR,并提供了一个命令行工具。

    4.1.3验证码识别

    验证码的主要目的是强制人机交互来抵御机器自动化攻击的。验证码作为一种辅助安全手段在Web安全中有着特殊的地位,验证码安全和web应用中的众多漏洞相比似乎微不足道,但是千里之堤毁于蚁穴,有些时候如果能绕过验证码,则可以把手动变为自动,对于Web安全检测有很大的帮助。

    全自动区分计算机和人类的图灵测试(英语:Completely Automated Public Turing test to tell Computers and Humans Apart,简称CAPTCHA),俗称验证码,是一种区分用户是计算机和人的公共全自动程序。在CAPTCHA测试中,作为服务器的计算机会自动生成一个问题由用户来解答。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类。

    对于文字识别技术只适用于字符型验证码识别工作,除此之外还需要对不同验证码设计相应的去噪算法等。

    4.2手写体识别应用

    4.2.1文通笔(联机手写)

    笔顺和连笔是影响联机手写汉字识别系统识别率的两个主要因素。前面讲过,解决笔顺问题的方法有二:一是对使用者提出严格的要求,希望他们按“标准”的笔顺、一笔一画地写字。这种要求,实际上很难做到。这是因为,事实上我国还没有统一的笔顺标准或规定;即使有一种标准,每个人的受教育程度和习惯不尽相同,要求做到都按标准笔顺写字,实际上几乎是不可能的。另一种办法是:对于容易出现笔顺不同的每一个汉字,设置若干标准模板。例如“女”字,有的人先写“く”笔,有的人则先写“一”笔,这个字就可能有两种不同的笔顺。在“字典”中可设置两个模板,它们的笔画相同,而笔顺不一样,但都代表“女”字。这样做会使字典的容量大大增加。在集成电路规模还不够大、速度也不够高的年代,这种办法不容易推广应用。

    连笔是一个更为困难的问题,实际上也很难解决。人们为了提高书写速度,写字时往往是一笔呵成。要求他们一笔一画、按部就班地书写,也几乎是不可能的。这个问题比笔顺问题更不易处理,这是目前市场上出售的笔式输入装置的识别率尚难进一步提高的主要原因。

    近几年投入市场的“文通笔”在解决上述笔顺和连笔的两个问题上做了一些努力,取得了一些成果,并在全国评测中获得较好的评价。取得这些进展的原因,一方面是由于计算机技术的迅速发展,机器资源已经不是制约识别算法的主要矛盾,设计者不必过分担心计算机的容量和速度的问题,可以更大胆地设计一些具有较高的抗干扰能力的算法;另一方面,在识别算法上,文通笔的研制者提出了一种富有创造性的结构法与统计法相结合的新技术,较好地解决了单纯的结构识别方法难以适应手写汉字字形及笔顺变化的问题。下面扼要介绍这种算法的要点。

    上面讲过,结构模式识别比较充分地描述被识别对象的结构信息。但是这种方法也有不少缺点:

    ①模式的描述是基于符号而不是基于数值,抗干扰能力差。

    ②描述基元关系的语法规则一般需由人工编写,难以利用机器自学习方法获得。

    ③句法分析较为复杂,运算量大。

    针对上述问题,文通笔在汉字字形建模方面做了一些创新性工作,包括:

    ①在比较严格的概率基础上建立了一种模式统计模型,可用于描述联机手写字形的空间信息,并易于用统计方法进行训练,建立手写汉字的二维模型。

    ②对隐马可夫模型(HMM)做了改进,提出控制状态转移路径的概念,使模型较适用于联机手写汉字的描述,较好地反映手写汉字的时间信息,还给出了这种模型的路径搜索算法及参数训练方法。

    ③将上述两种模型结合起来,用于联机手写汉字识别,在很大程度上解决了连笔和笔顺变化对识别系统性能的影响,使系统具有较高的鲁棒性。

    采用上述方法研制成功的“文通笔”,在近年两次“863计划”智能机主题专家组组织的评测会上名列前茅。系统可识别6763个简体汉字和5401个繁体汉字,对于书写比较工整的字,识别率在95%~99%之间;书写比较潦草的字也可达到87%~93%,前十位累加识别率仍达98%~99%;采用主流微机的识别速度大于3字/秒,能满足实际应用要求。

    4.2.2 古籍识别(脱机手写体识别)

    目前脱机手写体识别的主要应用方向在于古籍识别,在印刷术发明之前,古人传承书籍的方式主要依靠抄写,在印刷术发明之后,使用人力抄写的书籍数量减少,但信件、奏折类的包含大量手写体文字的载体依然不少。而使用人力来完成这些书信的电子化转储工作十分费力,因此,针对古籍中文字进行识别的科研需求应运而生。

    但是,由于古籍在保存中难免会遭到人为或非人为的损坏,导致字迹不清、残损的情况屡见不鲜,加之,手写体自身可能存在的较大差异性,使得古籍文字识别的工作难上加难。因此,对于脱机手写体识别的应用尚未出现未成功的案例。

    展开全文
  • 验证码识别

    2018-01-24 14:08:48
    验证码识别是3年前的一个小愿望了(当时是做一个自动回帖器,抽奖iphone),但自己这两年主要在做分布式架构,今年终于抽出了空,又战胜了对数学的恐惧,在coursera上学习了吴恩达的机器学习和深度学习,验证码识别...
  • 模式识别诞生于20实际20年代,随着40年代计算机的出现,50年代人工智能的兴起,模式识别在60年代初迅速发展成为一门学科。简单点说,模式识别是根据输入的原始数据对齐进行各种分析判断,从而得到其类别属性,特征...
  • 最近入坑研究OCR,看了比较多关于OCR的资料,对OCR的前世今生也有了一个比较清晰的了解。所以想写一篇关于OCR技术的综述,对OCR相关的...OCR英文全称是Optical Character Recognition,中文叫做光学字符识别。它...
  • 硅谷Live / 实地探访 / 热点探秘 / 深度探讨 城市人口密集早已不是秘密。...1900年,世界上只有14%的人居住在城市,但到了2008年,世界上有一半人口居住在城市地区,而且这一数字还在继续增长。...
  • 开源生物特征识别库 OpenBR OpenBR 是一个用来从照片中识别人脸的工具。还支持推算性别与年龄。 使用方法:$ br -algorithm FaceRecognition -compare me.jpg you.jpg更多OpenBR信息 最近...
  • 摘要:这篇博文介绍基于深度卷积神经网络实现的人脸表情识别系统,系统程序由Keras, OpenCv, PyQt5的库实现,训练测试集采用fer2013表情库。如图系统可通过摄像头获取实时画面并识别其中的人脸表情,也可以通过读取...
  • Matlab实现人脸识别

    2018-06-13 21:45:59
    最近在学习matlab图像处理部分,发现人脸识别这一块非常好玩,在这里做个总结。人脸识别之一:查找图片中的人脸并用方框圈出 这种类似于智能手机拍照时,屏幕里那个框任务头部的红框。大致步骤为:获取RGB图片---&...
  • android ocr 身份证识别

    2018-08-24 14:30:11
    ocr opencv 想必做过程图像识别的同学们都对这两个词不陌生吧。 ocr (optical character recognition ,光学字符识别) 是指电子设备(例如扫描仪或数码相机)检查纸上的字符,通过检测暗,亮的模式确定其形状,...
  • 人脸识别主要算法原理 主流的人脸识别技术基本上可以归结为三类,即:基于几何特征的方法、基于模板的方法和基于模型的方法。 1. 基于几何特征的方法是最早、最传统的方法,通常需要和其他算法结合才能有比较好的...
  • 伴随着物联网、大数据、人工智能技术的日益成熟,人脸识别技术快速落地于各种智能化应用场景,其中人脸识别智能门禁在智慧社区中发挥着非常重要的作用。业主不需携带钥匙也不用刷卡,只要刷脸就能进出小区,不但快捷...
  • 前不久Iphone X发布,革命性的取消了TouchID(指纹识别),而添加了更酷的 FaceID(人脸识别) 模块,FaceID 不简单的运用在解锁上,还可以在支付,表情等场景中应用,给开发者带来更酷更丰富的应用,Iphone X 在多个...
  • 在之前OpenCV实践之路——人脸识别之一数据收集和预处理和OpenCV实践之路——人脸识别之二模型训练两篇博客中,已经把人脸识别的整个流程全部交代清楚了。包括今天这篇人脸识别方面的内容都已经在上述第二篇博客中的...
  • 看完之后如有不懂,请看:关于人脸和指纹识别共同交流方案,也可以关注微信公众号:雄雄的小课堂,回复:人脸识别群获取群号,群内有直接可以运行的源码可供下载,人脸识别所需的软件群内也有!!! 人脸识别,...
1 2 3 4 5 ... 20
收藏数 1,557,009
精华内容 622,803
关键字:

识别