精华内容
下载资源
问答
  • 此应用程序使用来自Clarifai的图像识别模型来对您的照片进行质量分析。 安装 克隆此存储库并导入Android Studio git clone https://github.com/madjacks12/imageRanker 配置 API密钥库: 在此处使用您的Clarifai ...
  • 模板图像 T 从目标图像的原点处开始每次移动一个像素,直到匹配分数达到要求找到目标物体。 基于边缘模板的创建: 我们首先从模板图像的边缘创建一个数据集或模板模型,该数据集或模板模型将用于目标图像中去搜索...

    基于几何特征的模板匹配通过计算模板图像与目标图像特征信息,来判断目标图像中是否有与模板图像相近或相同的图像。
    模板匹配的大致流程:
    首先,需要制作一个模板,并以模板图像以一定角度旋转,制作0°–360°各个方向的模板。模板图像 T 从目标图像的原点处开始每次移动一个像素,直到匹配分数达到要求找到目标物体。
    在这里插入图片描述

    基于边缘模板的创建:

    我们首先从模板图像的边缘创建一个数据集或模板模型,该数据集或模板模型将用于目标图像中去搜索与模板图像相近或相同的图像。边缘检测的方法与canny边缘检测的方法类似。

    1利用sobel算子寻找图像的梯度和方向

    Sobel算子卷积因子如图所示
    在这里插入图片描述
    sobel算子在横向和纵向两个方向可以与图像作平面卷积。对于模板图像某点(x,y)可以得出两个方向的梯度向量Gx,Gy;

    我们计算该像素点幅值梯度:
    在这里插入图片描述

    计算梯度方向:
    在这里插入图片描述

    2非最大值抑制原理提取边缘信息

    sobel算子检测出来的边缘太粗了,我们需要抑制那些梯度不够大的像素点,只保留最大的梯度,从而达到瘦边的目的。这些梯度不够大的像素点很可能是某一条边缘的过渡点。按照高数的极大值的定义,即对点(x0,y0)的某个邻域内所有(x,y)都有f(x,y)≤(f(x0,y0),则称f在(x0,y0)具有一个极大值,极大值为f(x0,y0)。简单方案是判断一个像素点的8邻域与中心像素谁更大,但这很容易筛选出噪声,因此我们需要用梯度和梯度方向来辅助确定。
    如下图所示,中心像素C的梯度方向是蓝色直线dTmp1,dTmp2是梯度直线上与邻域交点的值,那么只需比较中心点C与dTmp1和dTmp2的大小即可。由于这两个点的像素不知道,假设像素变化是连续的,就可以用g1、g2和g3、g4进行线性插值估计。设g1的幅值M(g1),g2的幅值M(g2),则M(dtmp1)=w*M(g2)+(1-w)*M(g1) ,其w=distance(dtmp1,g2)/distance(g1,g2) 。也就是利用g1和g2到dTmp1的距离作为权重,来估计dTmp1的值。经过非最大值抑制可以滤除大部分非边缘点。
    在这里插入图片描述

    3用双阈值算法检测和连接边缘

    经过非极大值抑制之后的边缘点中,梯度值超过T1的称为强边缘,梯度值小于T1大于T2的称为弱边缘,梯度小于T2的不是边缘。可以肯定的是,强边缘必然是边缘点,因此必须将T1设置的足够高,以要求像素点的梯度值足够大(变化足够剧烈),而弱边缘可能是边缘,也可能是噪声,如何判断呢?当弱边缘的周围8邻域有强边缘点存在时,就将该弱边缘点变成强边缘点,以此来实现对强边缘的补充。
    在这里插入图片描述
    由此我们找到了模板图像边缘点的梯度信息Gx,Gy,θ,和位置信息(x,y)在与原图像匹配之前我们的模板数据集用如下方法表示:
    其中pi为相对于模板重心的相对坐标。pi=(Xi,Yi)T,i=1,2,3,4…n构成,对应于每个点有一个梯度方向向量di=(ti,ui)T

    模板匹配:

    1计算被搜索图像

    计算被搜索图像(目标图像)边缘点梯度信息,边缘点梯度信息与位置信息的计算同模板制作的过程。

    2金字塔下采样

    金字塔下采样后,需得到多级金字塔图像的边缘点梯度信息,边缘点梯度信息与位置信息的计算同模板制作的过程。其中金字塔用来对算法进行加速。

    3匹配过程:

    先在顶层金字塔进行快速搜索匹配得到一个匹配位置,然后在下一层金字塔进行匹配时候就能在该区域的ROI内进行搜索,以此类推,直到最底层。通过金字塔可以大大加快匹配速度。
    搜索目标图像之前,我们设被搜索图像(目标图像)点集(xi,yi)T, i=1,2,3,4…n,对应的每个点的方向向量为e(x,y)=(vx,y,wx,y)T
    由图像金字塔算法得到被搜索图像底层的ROI区域后,模板图像以重心点为原点在ROI区域进行遍历搜索。
    搜索过程按如下公式进行:
    在这里插入图片描述
    (上式di’相当于上文提到的di=模板的方向向量,pi’相当于上文提到的pi’=模板的边缘点)
    计算的是模板与子图像对应边缘点的梯度向量点积平均值。当一对对应边缘点梯度方向相同是,点积取得最大值,梯度方向正交时,点积为零,梯度方向相反时,点积取得负的最大值。计算得到的相似度量值不方便用于判断子图像是否为符合要求的结果,即很难确定一个阈值来筛选所需要的结果。因而对上式进行归一化处理:
    在这里插入图片描述
    (上式di’相当于上文提到的di=模板的方向向量,pi’相当于上文提到的pi’=模板的边缘点)
    上式描述的是,转换后的模板与被搜索图像点(x, y)处子图像所有对应点的方向向量点积和的归一化。由于对方向向量进行了归一化处理,相似度量对任意光照变化具有不变性,不管是模板、还是搜索图像中有噪声,由于噪声导致的方向向量是随机的,平均起来对以上求和公式没有贡献值,因而具有很好的抗干扰性。上式的取值范围为[−1, 1],返回值为1时,表示模板和搜索子图像与完全匹配。

     
    1. 完整代码添加QQ1575304183

    展开全文
  • 目录 项目描述 基本功能 业务流程 相关参数 技术选型 代码实现 项目描述 ...传统纸质化的试卷批改费时费力 ...使用Word自动化制作题卡(题卡合一,独立答题卡),生成分数格以及识别点,同时生成扫描用...

    目录

    • 项目描述
    • 基本功能
    • 业务流程
    • 相关参数
    • 技术选型
    • 代码实现
    • 效果预览

    项目描述

    1. 传统纸质化的试卷批改费时费力
    2. 扫描阅卷可减轻教室批改工作量
    3. 基于阅卷数据,可导出分析报表

    基本功能

    1. 录入试卷
    2. 制作答题卡
    3. 制作阅卷模板
    4. 扫描识别
    5. 分数统计
    6. 导出报表

    业务流程

    1. 首先将纸质化的试卷录入题库系统,用于制作题卡
    2. 使用Word自动化制作题卡(题卡合一,独立答题卡),生成分数格以及识别点,同时生成扫描用的模板
    3. 打印试卷,考试填涂试卷
    4. 将填涂过的试卷扫描进阅卷系统
    5. 识别试卷,统计分数
    6. 导出报表

    相关参数

    1. 题卡支持独立答题卡,题卡合一
    2. 选择题自动批改
    3. 填空题和解答题教师批改,扫描系统录入分数
    4. 教师批改支持在线批改,红笔打分,红笔填涂
    5. 题卡基于顶部定位线定位

    技术选型

    1. 制作题卡:Microsoft.Office.Interop.Word
    2. 连接扫描仪:ntwain
    3. 识别试卷:opencv

    代码实现

    效果预览

    制作好的扫描模板
    在这里插入图片描述

    展开全文
  • 图像识别的答题卡计分

    千次阅读 热门讨论 2016-07-12 14:58:07
    手机拍照答题卡,然后二值化,倾斜校正,位置标定,填涂答题卡计算,统计分数, 还可以计算填涂答题卡的质量

    手机拍照答题卡,
    然后
    二值化,
    倾斜校正,
    位置标定,
    填涂答题卡计算,
    统计分数,
    还可以计算填涂答题卡的质量
    这里写图片描述

    这里写图片描述

    展开全文
  • 大数据挖掘DT数据分析 公众号: datadw本文初赛、决赛代码 github 地址、数据集在公众号 datadw 里 回复 图像识别 即可获取。赛题以识别类似手写体的四则运算式为主题,参赛者需要在充满干扰信息的10万张图片中,...
        

    640?wx_fmt=gif&wxfrom=5&wx_lazy=1

     向AI转型的程序员都关注了这个号???


    大数据挖掘DT数据分析  公众号: datadw


    本文初赛、决赛代码 github 地址、数据集

    在公众号 datadw 里 回复 图像识别  即可获取。


    赛题以识别类似手写体的四则运算式为主题,参赛者需要在充满干扰信息的10万张图片中,设计算法识别图片上数学运算式并计算结果。决赛在初赛的基础上,引入分数和更加复杂的运算,同样以最终的识别率来评判算法。


    本节会详细介绍我在进行四则混合运算识别竞赛初赛时的所有思路。

    问题描述

    本次竞赛目的是为了解决一个 OCR 问题,通俗地讲就是实现图像到文字的转换过程。


    数据集

    初赛数据集一共包含10万张180*60的图片和一个labels.txt的文本文件。每张图片包含一个数学运算式,运算式包含:

    3个运算数:3个0到9的整型数字; 2个运算符:可以是+、-、*,分别代表加法、减法、乘法 0或1对括号:括号可能是0对或者1对

    图片的名称从0.png到99999.png,下面是一些样例图片(这里只取了一张):

    640?wx_fmt=png&wxfrom=5&wx_lazy=1


    文本文件 labels.txt 包含10w行文本,每行文本包含每张图片对应的公式以及公式的计算结果,公式和计算结果之间空格分开,例如图片中的示例图片对应的文本如下所示:

    (3-7)+5 1
    5-6+2 1
    (6+7)*2 26
    (4+2)+7 13
    (6*4)*4 96

    评价指标

    官方的评价指标是准确率,初赛只有整数的加减乘运算,所得的结果一定是整数,所以要求序列与运算结果都正确才会判定为正确。

    我们本地除了会使用官方的准确率作为评估标准以外,还会使用 CTC loss 来评估模型。

    使用 captcha 进行数据增强

    官方提供了10万张图片,我们可以直接使用官方数据进行训练,也可以通过Captcha,参照官方训练集,随机生成更多数据,进而提高准确性。根据题目要求,label 必定是三个数字,两个运算符,一对或没有括号,根据括号规则,只有可能是没括号,左括号和右括号,因此很容易就可以写出数据生成器的代码。

    生成器

    生成器的生成规则很简单:

    import stringimport random
    
    digits = string.digits
    operators = '+-*'characters = digits + operators + '() '

    def generate(): seq = '' k = random.randint(0, 2) if k == 1: seq += '(' seq += random.choice(digits) seq += random.choice(operators) if k == 2: seq += '(' seq += random.choice(digits) if k == 1: seq += ')' seq += random.choice(operators) seq += random.choice(digits) if k == 2: seq += ')' return seq

    相信大家都能看懂。当然,我写文章的时候又想到一种更好的写法:

    import random
    def generate(): ts = [u'{}{}{}{}{}', '({}{}{}){}{}', '{}{}({}{}{})'] ds = u'0123456789' os = u'+-*' cs = [random.choice(ds)
    if x%2 == 0
       else
    random.choice(os)
    for x in range(5)]
       return random.choice(ts).format(*cs)

    除了生成算式以外,还有一个值得注意的地方就是初赛所有的减号(也就是“-”)都是细的,但是我们直接用 captcha 库生成图像会得到粗的减号,所以我们修改了 image.py 中的代码,在 _draw_character 函数中我们增加了一句判断,如果是减号,我们就不进行 resize 操作,这样就能防止减号变粗:

    # line 191-194if c != '-':
        im = im.resize((w2, h2))
        im = im.transform((w, h), Image.QUAD, data)

    我们继而使用生成器生成四则运算验证码:

    import stringimport os
    
    digits = string.digits
    operators = '+-*'characters = digits + operators + '() '

    width, height, n_len, n_class = 180, 60, 7, len(characters) + 1

    from captcha.image import ImageCaptcha generator = ImageCaptcha(width=width, height=height,
    font_sizes=range(35, 56), fonts=['fonts/%s'%x for x in os.listdir('fonts')
    if '.tt' in x] ) generator.generate_image('(1-2)-3')


    640?wx_fmt=png


    上图就是原版生成器生成的图,我们可以看到减号是很粗的。

    640?wx_fmt=png


    上图是修改过的生成器,可以看到减号已经不粗了。

    模型结构

    from keras.layers import *from keras.models 
    import *from make_parallel import make_parallel rnn_size = 128input_tensor = Input((width, height, 3)) x = input_tensorfor i in range(3): x = Conv2D(32*2**i, (3, 3),
    kernel_initializer='he_normal')(x) x = BatchNormalization()(x) x = Activation('relu')(x) x = Conv2D(32*2**i, (3, 3),
    kernel_initializer='he_normal')(x) x = BatchNormalization()(x) x = Activation('relu')(x) x = MaxPooling2D(pool_size=(2, 2))(x) conv_shape = x.get_shape() x = Reshape(target_shape=(int(conv_shape[1]),
    int(conv_shape[2]*conv_shape[3])))(x) x = Dense(128, kernel_initializer='he_normal')(x) x = BatchNormalization()(x) x = Activation('relu')(x) gru_1 = GRU(rnn_size, return_sequences=True,
    kernel_initializer='he_normal', name='gru1')(x) gru_1b = GRU(rnn_size, return_sequences=True,
    go_backwards=True, kernel_initializer='he_normal', name='gru1_b')(x) gru1_merged = add([gru_1, gru_1b]) gru_2 = GRU(rnn_size, return_sequences=True,
    kernel_initializer='he_normal', name='gru2')(gru1_merged) gru_2b = GRU(rnn_size, return_sequences=True,
    go_backwards=True, kernel_initializer='he_normal', name='gru2_b')(gru1_merged) x = concatenate([gru_2, gru_2b]) x = Dropout(0.25)(x) x = Dense(n_class, kernel_initializer='he_normal',
    activation='softmax')(x) base_model = Model(input=input_tensor, output=x) base_model2 = make_parallel(base_model, 4) labels = Input(name='the_labels', shape=[n_len], dtype='float32') input_length = Input(name='input_length', shape=(1,), dtype='int64') label_length = Input(name='label_length', shape=(1,), dtype='int64') loss_out = Lambda(ctc_lambda_func, name='ctc')([base_model2.output, labels, input_length, label_length]) model = Model(inputs=(input_tensor, labels, input_length,
    label_length), outputs=loss_out) model.compile(loss={'ctc': lambda y_true, y_pred: y_pred},
    optimizer='adam')


    本文来自 微信公众号 datadw  【大数据挖掘DT数据分析】


    模型结构像之前写的文章一样,只是把卷积核的个数改多了一点,加了一些 BN 层,并且在四卡上做了一点小改动以支持多GPU训练。如果你是单卡,可以直接去掉 base_model2 = make_parallel(base_model, 4) 的代码。

    BN 层主要是为了训练加速,实验结果非常好,模型收敛快了很多。

    base_model 的可视化:

    640?wx_fmt=png

    model 的可视化:

    640?wx_fmt=png

    模型训练

    在经过几次测试以后,我已经抛弃了 evaluate 函数,因为在验证集上已经能做到 100% 识别率了,所以只需要看 val_loss 就可以了。在经过之前的几次尝试以后,我发现在有生成器的情况下,训练代数越多越好,因此直接用 adam 跑了50代,每代10万样本,可以看到模型在10代以后基本已经收敛。

    640?wx_fmt=png

    我们可以看到模型先分为四份,在四个显卡上并行计算,然后合并结果,计算最后的 ctc loss,进而训练模型。

    结果可视化

    这里我们对生成的数据进行了可视化,可以看到模型基本已经做到万无一失,百发百中。

    640?wx_fmt=png


    打包成 docker 以后提交到比赛系统中,经过十几分钟的运行,我们得到了完美的1分。

    640?wx_fmt=png

    总结

    初赛是非常简单的,因此我们才能得到这么准的分数,之后官方进一步提升了难度,将初赛测试集提高到了20万张,在这个集上我们的模型只能拿到0.999925的成绩,可行的改进方法是将准确率进一步降低,充分训练模型,将多个模型结果融合等。

    官方扩充测试集的难点

    在扩充数据集上,我们发现有一些图片预测出来无法计算,比如 [629,2271,6579,17416,71857,77631,95303,102187,117422,142660,183693] 等,这里我们取 117422.png 为例。

    640?wx_fmt=png


    我们可以看到肉眼基本无法认出这个图,但是经过一定的图像处理,我们可以显现出来它的真实面貌:

    IMAGE_DIR = 'image_contest_level_1_validate'index = 117422img = cv2.imread('%s/%d.png' % (IMAGE_DIR, index))
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    h = cv2.equalizeHist(gray)


    然后我们可以看到这样的结果:

    640?wx_fmt=png

    当然,还有一张图是无法通过预处理得到结果的,142660,这有可能是程序的 bug 造成的小概率事件,所以初赛除了我们跑了一个 docker 得到满分以外,没有第二个人达到满分。

    640?wx_fmt=png

    本文初赛、决赛代码 github 地址、数据集

    在公众号 datadw 里 回复 图像识别  即可获取。




    人工智能大数据与深度学习

    搜索添加微信公众号:weic2c

    640?wx_fmt=png

    长按图片,识别二维码,点关注



    大数据挖掘DT数据分析

    搜索添加微信公众号:datadw


    教你机器学习,教你数据挖掘

    640?wx_fmt=jpeg

    长按图片,识别二维码,点关注

    展开全文
  • [TensorFlow 2]用于图像识别的深度残差学习 相关资料库 概念 两种残差块[1]。 表现 指标 价值 准确性 0.99200 精确 0.99197 记起 0.99188 F1-分数 0.99191 Confusion Matrix [[ 977 0 1 0 0 0 1 1 0 0] [ 1 ...
  • okay 本节在上一节mnist图像识别的基础上增加一些优化算法,例如 dropout 学习率递减 L1、L2正则 bacth normal正则化优化上一节的模型。 从以下四个实验结果我们可以知道batch normal是个利器直接能够将模型的...
  • 为了改善图像质量,本文提出了自适应分数阶微分的图像增强算法.该算法首先在Grünwald-Letnikov分数阶微分定义的基础上,充分利用相邻像素点的信息,设计了具有旋转不变性的分数阶微分掩模;其次,利用图像梯度,局部的...
  • SourceAFIS是一种指纹识别引擎,可获取一对人类指纹图像并返回其相似度分数。 它可以进行1:1比较以及高效的1:N搜索。 这是SourceAFIS算法的Java实现。 文档: , , , 下载:请参阅页面 资料来源: , 问题:...
  • Visual C++数字图像模式识别技术及工程。分数不多
  • 我创建了一个小演示,该演示对两个图像数据集(我的照片和我的女友的照片)进行了分类,并返回一个预测分数,表明它是我的图像还是女友的图像。 安装 确保已安装 ,然后在系统上安装 ,并克隆此。 用法 我们的团队A
  • 运用模式识别技术,提出了分数阶微分自适应去噪算法,它基于AA模型(Aubert-Aujol模型)运用分数阶微分理论对图像进行建模,建立了分数阶微分模型,模型参数分数阶阶数u和图像各点对应正则化参数λ根据区域特征进行自适应...
  • 再针对这两种模态图像特点分别进行分类器设计,得出各自的识别结果后,结合上述得到的图像采集质量评价分数进行决策级融合,将融合后的结果作为最终的识别结果.实验表明,该方法有效克服图像质量对识别结果的影响,提高...
  • Python识别答题卡并给出分数

    千次阅读 多人点赞 2021-06-20 17:02:58
    看过我们图像处理系列的朋友,应该知道识别答题卡那期文章。其中利用opencv框架,完美的实现了答题卡填涂区域的识别。在后台有小伙伴想要我完善一下判断选项对错并打分的功能,本期我们就来实现一下。   那么我们...
  • 本文利用分数理论提出了一种有效的特征级别融合方案,称为指节图像分数布谷鸟搜索算法(FCS)。 在这项工作中,使用 HOG 方法提取了个体的左索引和右索引特征。 这些特征向量通过最佳权重分数选择融合,从提出的...
  • 基于分数阶Fourier变换的人脸面部表情识别(高磊) 特性 将分数阶傅里叶变换用于人脸图像 基于分数阶Fourier变换的人脸面部表情识别(高磊) 文章地址:paper 摘要:分数阶傅里叶变换是传统傅里叶变换是...
  • 本案例侧重于图像识别方面的实现,应用了图像校正、模式识别等方面的算法。 二、理论基础 答题卡自动阅卷系统通过获取答题卡图像作为系统输入,并通过计算机处理、自动识别填涂标记,存入数据库完成阅卷。在图像数字...
  • 图像中自动识别金基准标记的深度神经网络。 该存储库包含 Jamtheim Gustafsson 等人在 2020 年 Phys 的出版物“基于深度学习的人工智能的开发和评估,用于在仅 MRI 前列腺放射治疗工作流程中自动识别黄金基准标记”...
  • 卷积神经网络CNNsConvNets 概述 用于构建CNN的层 ...整个网络仍然表示单个可微分的分数函数:从一端的原始图像像素到另一端的各类别得分。 他们在最后一个(完全连接)层上仍然有一个损失函数(例如SVM /
  • 基于分数阶傅里叶变换对光照、表情的鲁棒性,已在图像处理领域得到应用。FRFT幅度随阶次的变换呈现压缩性,而SPCA提取其主要信息,且分为主要信息域和次要信息域,融合两者的互补信息组成混合幅度特征,然后融合混合...
  • 基于分数阶傅里叶变换统计信息的人脸识别(孙慧静) 文章地址:paper 分数阶傅里叶变换作为新兴的图像处理工具,可以看作信号在时频平面进行任意角度的逆时针旋转。它引入了变换阶次,可以分析信号的时频域信息...
  • 使用带有ORL图像数据库的主成分分析(PCA)的人脸识别器。 该项目中使用的库: -OpenCV -脾气暴躁 -垫图 -斯克莱恩 结果 算法:LBPHFaceRecognizer PCA数:1,准确性得分:96.75% PCA分数:2,准确性得分:96.75...
  • 内容算是不少了,分数必须高,有问题联系
  • 该非线性分数相关系统由一个光电混合装置实现,数值仿真表明,这种光学图像识别系统的优点在于对目标的形状失真和纹理改变的分辨能力是可调节的,并且可改善相关峰的性能,具有很强的抗噪声能力。
  • 人脸识别 做出React的人脸识别应用程序。 运行说明: 在终端中键入以下命令:npm start
  • 简单的模板匹配。 在图像 (Is) 的边缘图像中查找模板 (Itm)。 返回模板在图片中的位置以及该点匹配的分数。... 对于识别图像中模板的类似功能,即使对象不符合模板大小,请参阅“简单模板匹配与可变图像模板大小比”。
  • 返回模板在图像中的位置和最佳匹配的分数。 显示带有标记的模板的图像 (Is)。 输入: 1) 应在其中找到模板的灰度图像 (​​Is)。 2)模板二进制图像(Itm)。 方法:利用模板上和模板周围的边缘密度的差异来获得匹配...
  • 智能图像处理技术PDF

    热门讨论 2010-10-28 17:31:22
    全书共分为15章,重点讨论了图像边缘检测、图像分割、图像特征分析、图像配准、图像融合、图像分类、图像识别、基于内容的图像检索与图像数字水印。此外,为了内容的完整性,本书还介绍了图像预处理技术,如图像采集...
  • 利用FRFT的时频双重特性和LBP算子能提取纹理图像微小特征的优点,提出一种将分数阶Fourier变换(FRFT)与局域二值模式(LBP)算子相结合的笑脸识别算法。对训练样本进行分数阶Fourier变换,取其变换的幅值信息作为脸部表情...
  • 识别学号,学科,答案,并进行分数统计,以及判断是否及格。后台可设置标准excel答案。经过灰度变换形成灰度图像、二值化处理、图像滤波、边缘检测、hough变换等预处理。带GUI交互式界面。 2、识别原理:计算出了...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 157
精华内容 62
关键字:

图像识别分数