计算机

计算机 · 圈子

8559 位酷友已加入

计算机圈子中包含常用的技术文档、源代码、模型、数据集、学习教程、技术报告等干货资料,加入圈子可以上传、下载资料,也可以使用提问来寻求资料或分享你认为有价值的站外链接~

关注推荐最新

热门标签

资源

超级智能城市2.0-人工智能引领新风尚_德勤中国_2020

核心观点/主要成果 超级智能城市2.0 超级智能城市评价指标体系的构建是为了从整体了解智慧城市的建设现状和未来发展前景,通过德勤全球视角引导城市发现自身智慧城市建设的短板,挖掘自身的潜力,将智慧城市建设与自身需求相结合,稳步提高智慧城市的发展水平,让市民拥有更多的幸福感和获得感。 智慧城市发展的动态性要求指标体系也要不断调整,今年的指标体系内部加入了人工智能这一新的评价项目。 报告对目前中国26个城市的智慧城市进程指数进行了滚动更新: 整体来看,智能城市的发展与经济发展水平呈现正相关的关系,但也不乏智能城市发展落后于经济发展水平的情况,特别是在一些新晋发展的城市表现明显。 一线城市的智能城市发展水平已经大幅度领先于其他城市,特别在创新水平上,其他城市表现出了明显的劣势,不利于可持续的智能城市建设。此外,所有城市之间在智能城市应用领域表现出的参差不齐较严重。 人工智能赋能智慧城市 人工智能城市产业链包括基础层加上核心技术层,然后再加上垂直应用。垂直领域细分为产品和应用智能系统。 七大特征包括有实时感知、高速传输、自主学习、自主决策、自主协同、自动优化、自主控制。 这七大特征是互相关联缺一不可的,未来超级智能城市需要完全具备这些特征。 以人为本:从智慧城市向智慧社会转变 十九大报告中提出了智慧社会的概念,是对“新型智慧城市”的理念深化和范围拓展,强调基于智慧城市使市民拥有更多的获得感、幸福感,再一次强调了智慧城市的发展要注重以人为本,强调市民在智慧城市建设过程中的参与行为。 市民参与是构建以人为本的智慧城市的前提,在新型智慧城市的发展过程中要强调市民在决策制定、公共和社会服务、透明治理上的参与。 完善的市民参与系统是一个综合的体系,需要意识的提高和信息资源的进步。 目录 全球城市再进阶 超级智能城市2.0 打造超级智能城市 超级智能城市新风向 评价指标体系 报告来源:德勤中国 转载自https://www2.deloitte.com/cn/zh/pages/public-sector/articles/super-smart-city-2-0.html 发布时间:2020年

资源

全球人工智能发展白皮书_德勤中国_2020

《全球人工智能发展白皮书》由德勤科技、传媒和电信行业编制。本文深入研究了人工智能技术步入商业化阶段后,在全球各主要城市的创新融合应用概况,以及其将对金融、教育、数字政务、医疗、无人驾驶、零售、制造业、智慧城市等各行业带来的深刻变革。 核心观点/主要成果 人工智能正全方位商业化,加速企业数字化、改善产业链结构、提高信息利用效率。 AI全面进入机器学习时代,未来人工智能的发展将是关键技术与产业的结合。 人工智能投资趋于理性,底层技术和易落地领域更受人工智能领先机构青睐,互联网巨头也开始在人工智能业务关联产业进行战略布局。 作为未来的新型行业,人工智能企业呈现出高增长的特征。中国人工智能产业在资金和政策的大力支持下发展迅速,某些关键技术已位于世界前列。根据不完全的公开信息,德勤对人工智能企业进行了梳理,筛选出50家高增长企业(后附),其中“乂学教育-松鼠AI”“字节跳动” “云从科技”为代表的教育、商业智能和人脸识别细分领域内的中国企业,其增速分别超5000%、700%和600%,表现非常抢眼。 城市是承载AI技术创新融合应用的综合性载体,也是人类与AI技术产生全面感知的集中体验地。 政策与资本推动京津冀、长三角、珠三角成为人工智能企业分布最多的地区,北京、上海领跑全国。以上海和北京为代表的一线城市在人才数量、企业数量、资本环境以及科研能力长期处于第一梯队。 人工智能正在重塑各个行业,引发社会深刻变革: 人工智能推动金融行业构建更大范围内的高性能生态系统,提升金融企业商业效能并变革企业内部经营全过程。 人工智能在教育行业的应用逐步深入,应用场景向覆盖教学全流程方向变革。 数字政务的建设主要依靠自上而下推动,构建政务数字化目标加速政府智能化变革。 以无人驾驶技术为主导的汽车行业将迎来产业链的革新。 人工智能在制造业领域的应用潜力被低估,优质数据资源未被充分利用。 零售领域应用场景从个别走向聚合,传统零售企业与创业企业结成伙伴关系,围绕人、货、场、链搭建应用场景。 医疗行业人工智能应用发展快速,但急需建立标准化的人工智能产品市场准入机制并加强医疗数据库的建设。 目录 一、AI创新融合新趋势 1.1 人工智能正全方位商业化 1.2 AI全面进入机器学习时代 1.3 市场对投资回归理性 1.4 城市逐渐成为AI创新融合应用主战场 1.5 AI支持体系不断发力 1.6 顶层政策倾斜力度持续增加 1.7 全球AI市场超6万亿美元 1.8 京津冀、长三角、珠三角AI企业云集 二、人工智能技术发展腾飞 2.1 人工智能关键技术日趋成熟 2.2 人工智能开放平台建设稳步推进 2.3 “人机大战”谁更能更胜一筹? 三、中国在全球AI地位 3.1 中国拥有更为庞大的数据规模以及更丰富数据使用环境 3.2 中国是全球芯片需求量最大的市场,但高端芯片依赖进口 3.3 中国机器人企业快速成长核心零部件技术国产化加速 3.4 美国人工智能底层技术实力更为雄厚,中国则在语音识别技术上更优 3.5 中国在AI应用上呈现追击态势 四、人工智能重塑各行业 4.1 金融:人工智能提升金融企业商业效能并变革企业内部经营 4.2 教育:人工智能技术应用覆盖教学全流程 4.3 数字政务:政策利好加速政府智能化变革 4.4 医疗:人工智能应用日趋成熟 4.5 无人驾驶:主导汽车产业革新 4.6 零售:人工智能驱动行业走向聚合 4.7 制造业:智能制造应用潜力巨大 4.8 智慧城市:人工智能塑造城市基础设施创新系统 报告来源:德勤中国 转载自:https://www2.deloitte.com/cn/zh/pages/technology-media-and-telecommunications/articles/global-ai-development-white-paper.html

计算机

计算机·圈子   首发

anna 发布了
问答

在Pytorch中使用Dropout:nn.Dropout与F.dropout有什么区别?

通过使用pyTorch,有两种方法可以 dropout torch.nn.Dropout和torch.nn.functional.Dropout。 我很难看到它们之间的区别: 1.什么时候使用哪一种? 2.有什么不同吗?

计算机

计算机·圈子   首发

阿托 更新了
资源

【毕业设计】HOG+SVM行人检测

HOG+SVM行人检测 1.基于python和opencv编写的代码,应用经典的HOG+SVM算法实现行人检测 目录说明: Negative:负样本数据集; Positive:正样本数据集; TestData:测试数据集; pedestran_detect.py:使用HOG+SVM进行训练+测试代码。 详细可参考博客:https://blog.csdn.net/hongbin_xu/article/details/79845290 2. matlab HOG特征提取演示和模糊PID仿真 目录说明: hog:HOG特征提取 Simulation:PID控制仿真,模糊推理系统,模糊PID控制仿真 3. server 服务器的代码 大多数文件是测试学习用,关键代码在SocketsDemo和TKinterTest文件夹中 模型和训练数据太大,不上传。获取数据或训练模型参考博客: https://blog.csdn.net/hongbin_xu/article/details/79845290 4.app Android项目 5.stm32 下位机程序 来源https://github.com/MingguoXu/GraduationProject

资源

基于深度学习的图像超分辨率重建

实验目的 本实验将使用深度学习技术对图像进行超分辨率重建,涉及到的技术包括了卷积神经网络,生成对抗网络,残差网络等。 实验过程 开发环境 本实验使用到“Microsoft Visual Studio”、“VS Tools for AI”等开发组件,涉及到了“TensorFlow”、“NumPy”、“scipy. misc”、“PIL.image”等框架和库,其中“scipy. misc”与“PIL.image”用于图像处理。本实验还需要“NVIDIA GPU”驱动、“CUDA”和“cuDNN”等 数据探索 本实验的数据可以选择CV领域各类常见的数据集,实验将以CelebA数据集作为示例。CelebA是香港中文大学开放的人脸识别数据,包括了10177个名人的202599张图片,并有5个位置标记和40个属性标记,可以作为人脸检测、人脸属性识别、人脸位置定位等任务的数据集。本实验使用该数据集中img_align_celeba.zip这一文件,选择了其中前10661张图片,每张图片根据人像双眼的位置调整为了219x178的尺寸。解压后的图片如图1所示。 本实验需要得到图1中图像的低分辨率图像,并通过深度学习将这些低分辨率图像提升到高分辨率图像,最后与图1中的原图进行对比查看模型的效果。 在图像超分辨率问题中,理论上可以选择任意的图像数据,当时根据经验,使用有更多细节纹理的图像会有更好的效果,使用无损压缩格式的PNG格式图像比JPG格式图像有更好的效果。 数据预处理 本实验的数据预处理需要将图1中的原始图像整理为神经网络的对应输入与输出,并对输入做数据增强。在预处理前,将最后五张图像移动到新的文件夹中作为测试图像,其余图像作为训练图像。 图像尺寸调整 为了提升实验效率和效果,首先将训练与测试图像调整到128x128的尺寸,注意实验没有直接使用“resize”函数,因为“resize”函数进行下采样会降低图像的分辨率,实验使用了“crop”函数在图像中间进行裁剪,并将最后裁剪后的图像持久化保存。 载入数据 实验中将时使用TensorFlow的Dataset API,该API对数据集进行了高级的封装,可以对数据进行批量的载入、预处理、批次读取、shuffle、prefetch等操作。注意prefetch操作有内存需要,内存不足可以不需要进行prefetch;由于本实验的后续的网络结构较深,因此对显存有相当高的要求,这里的batch大小仅仅设为30,如果显存足够或不足可以适当进行调整。 图像预处理 在图像处理中,常常在图像输入网络前对图像进行数据增强。数据增强有两个主要目的,其一是通过对图像的随机变换增加训练数据,其二是通过随机的增强使得训练出的模型尽可能少地受到无关因素的影响,增加图像的泛化能力。本节首先在文件中读取前文裁剪后的图像;然后对训练图像进行随机的左右翻转;并在一定范围内随机调整图像的饱和度、亮度、对比度和色相;然后将读取的RGB值规范化到[-1, 1]区间;最后使用双三次插值的方法将图像下采样四倍到32*32尺寸。 持久化测试数据 在前序预处理后,实验将把测试集的特征和标签数据持久化到本地,以在后续的训练中与模型的输出做对比。 模型设计 本实验将使用GAN、CNN和ResNet的组合构建超分辨率模型。本节将首先介绍GAN的生成器中使用到的残差块与上采样的PixelShuffle,然后分别介绍GAN中生成器与判别器,最后介绍模型的训练过程。 残差块 残差块的输入为x,正常的模型设计的输出是两层神经网络的输出F(x),残差块将输入的x与两层的输出F(x)相加的结果H(x)作为残差块的输出。这样的设计达到了前面假设的目的,训练的目标是使得残差F(x)=H(x)-x逼近于0,即H(x)与x尽可能的近似。随着网络层次的加深,这样的设计保证了在后续的层次中网络的准确度不会下降。 在本实验的实现中,图2残差块中weight layer将是有64个特征图输出、卷积核大小为3*3,步长为1的卷积层,并设置了Batch Normalization层,Relu激活函数也改为了PRelu。代码如下所示: 上采样 PixelShuffler 本实验的目标是将32x32的低分辨率图像超分辨率到128x128。因此模型无可避免需要做上采样的操作。在模型设计阶段,实验了包括了Conv2DTranspose方法,该方法是反卷积,即卷积操作的逆,但是实验结果发现该方法会造成非常明显的噪声像素;第二种上采样方法是TensorFlow UpSampling2D + Conv2D的方法,该方法是CNN中常见的max pooling的逆操作,实验结果发现该方法损失了较多的信息,实验效果不佳。本文最终选择了PixelShuffle作为上采样的方法。PixelShuffle操作如图3所示。输入为H*W的低分辨率图像,首先通过卷积操作得到r^2个特征图(r为上采样因子,即图像放大的倍数),其中特征图的大小与低分辨率图的大小一致,然后通过周期筛选(periodic shuffing)得到高分辨率的图像。 、 本实验将卷积部分的操作放到了GAN的生成器中,下面的代码展示了如何在r^2个特征图上做周期帅选得到目标高分辨率图像输出。 生成器 本实验使用的基本模型是GAN,在GAN的生成器部分将从低分辨率的输入产生高分辨率的模型输出。 判别器 本实验的GAN判别器的输入是一张128*128的图像,目标输出是一个布尔值,也就是判断输入的图像是真的图像还是通过模型为伪造的图像。本实验设计的生成器是由全卷积网络实现。 损失函数与优化器定义 常规的GAN中,生成器的损失函数为对抗损失,定义为生成让判别器无法区分的数据分布,即让判别器将生成器生成的图像判定为真实图像的概率尽可能的高。但是在超分辨率任务中,这样的损失定义很难帮助生成器去生成细节足够真实的图像。因此本实验为生成器添加了额外的内容损失。内容损失的定义有两种方式,一种是经典的均方误差损失,即对生成器生成的网络与真实图像直接求均方误差,这样方式可以得到很高的信噪比,但是图像在高频细节上有缺失。第二种内容损失的基础是预训练的VGG 19网络的ReLU激活层为基础的VGG loss,然后通过求生成图像和原始图像特征表示的欧氏距离来计算当前的内容损失。 本实验选择了VGG loss作为内容损失,最终的生成器损失定义为内容损失和对抗损失的加权和。本部分该部分代码如下所示,注意首先定义了用于计算内容损失的VGG 19网络: 本实验的判别器损失与传统的GAN判别器损失类似,目标是将生成器生成的伪造图像尽可能判定为假的,将真实的原始图像尽可能判断为真的。最终的判别器损失是两部分的损失之和。本部分代码如下所示: 优化器选择的是Adam,beta 1设为0.9,beta 2设为0.999,epsilon设为1e-8,以减少震荡。代码如下所示: 训练过程 实验将首先导入上文的数据、模型与判别器,然后定义了checkpoint以持久化保存模型,然后一个批次一个批次地读取数据,进行每一步的训练。总体训练流程如下所示: 在每一步的训练中,首先通过生成器获得伪造的高分辨率图像,然后分别计算生成器与判别器的损失,再分别更新生成器与判别器的参数,注意这里生成器与判别器的训练次数是1:1。代码如下所示: 实验评估 本实验的评估部分将对比低分辨率图片、模型生成的高分辨率图片和原始图片的区别。本实验的训练数据有10656个图片,测试数据为5个图片。由于实验评估图像分辨率的提升效果,因此不需要按照一定比例划分训练集和测试集,而越多的训练数据也有更好的建模效果。但是需要注意的是,按照本实验现在的模型,需要的显存约为6.8G,如果增大批次数量、增加卷积层特征图数量、加深网络或增大原始图片分辨率,将进一步增加显存。 在本实验中,使用的是TensorFlow GPU版本,实验的GPU是NVIDIA GeForce GTX 1080,显存大小为8G。当前实验的各项超参数已经达到该显卡的最大可用显存。当前训练集一次迭代约需要7—8分钟,20次迭代的训练将持续约2.5小时。 图4中生成器的损失在前20次迭代训练下降,20次迭代到60次迭代后在0.02上下波动,损失进一步下降变得缓慢;判别器的损失下降较为明显,但是注意到有多次震荡情况的出现。本实验继续增大迭代次数可能会有更好的损失表示。 表2显示了迭代42次和迭代60次后的模型在测试集上的表现对比。 表1可见模型对分辨率有非常明显的提升,第一列低分辨率图像在放大后细节部分非常模糊,而第二列迭代42次于第三列迭代60次后,图像在一些细节部分例如头发、五官等有了更加清晰的轮廓。但是模型与原始图相比仍然还有差距,不能做到以假乱真。这一方面是因为实验只是在迭代60次后的模型上进行评估;一方面是因为原图是以JPG格式存储的,所以相比PNG无损格式的图片在细节上有先天的不足;还有原因是本实验将图片剪裁到了128*128,这是考虑到显存的权宜之计,更高的原始分辨率会有更丰富的细节信息。进一步增加迭代次数、进一步调整参数、扩大图片原始尺寸、使用原始PNG格式的图片等方法会导致最后的模型有更佳的效果。 转载自:https://github.com/kadoufall/Image-Super-Resolution-VS

资源

吴恩达新书《Machine Learning Yearning》完整中文版,机器学习训练秘籍

本资源为吴恩达历经 2 年时间,结合自己多年学术、实践经验整理出的机器学习秘籍。 对于创作这本书的目的,吴恩达说: 人工智能、机器学习和深度学习正在改变许多行业。我写这本书,其目的是教大家如何构造机器学习项目。 人工智能、机器学习和深度学习正在改变许多行业。我写这本书,其目的是教大家如何构造机器学习项目。 这本书的重点不是教你ML算法,而是如何让ML算法发挥作用。一些AI技术会给你一个锤子;这本书教你如何使用锤子。如果你渴望成为AI的技术领导者,并且想要为你的团队设定方向,这本书将会有所帮助。这本书的重点不是教你ML算法,而是如何让ML算法发挥作用。一些AI技术会给你一个锤子;这本书教你如何使用锤子。如果你渴望成为AI的技术领导者,并且想要为你的团队设定方向,这本书将会有所帮助。 本书能让你掌握以下内容: 考虑人工智能项目最有前途的方向。 在机器学习系统中诊断错误。 在复杂的设置中构建ML,例如不匹配的训练集/测试集。 建立一个ML项目来比较和/或超过人类级的性能。 了解何时以及如何应用端到端学习、迁移学习和多任务学习。 从以前经验来看,学习如何做出这些“战略”决定的唯一方法是在研究机构或公司里从事多年学习研究。我编写的这本书,希望能帮助你快速获得这项技能,以便你能更好地建立人工智能系统。这本书有100多页。 本书中文版github地址:https://github.com/deeplearning-ai/machine-learning-yearning-cn 在线阅读:https://deeplearning-ai.github.io/machine-learning-yearning-cn/docs/home/

资源

CV算法推理框架应用

项目目的 一个算法模型的落地需要经历从算法任务确立,到方法调研、模型选型和优化、数据采集标定、模型训练、部署验证等一整个pipeline,其中对于绝大多数的算法工程师,模型的训练和输出是没有问题的,但是要快速地进行模型在移动设备上的效果验证,则需要移动端开发人员和配合才能完成。另一方面,考虑到团队内CV算法研究方向很多,如果每个模型都单独在移动端开发一套验证APP的话显然费时费力。 为了解决模型移动端部署验证困难,以及每个模型都单独在移动端开发一套验证APP带来的重复工作的问题,本项目实现了CV算法快速验证框架项目,旨在提供一套通用的CV算法验证框架。框架经过一年多的开发和维护,目前已经完成绝大部分API的开发,实现包括实时视频流模块、单帧图像处理模块、3D场景模块、云端推理模块等众多功能。 研究方法 构建包含推理的应用程序所涉及的不仅仅是运行深度学习推理模型,开发者还需要做到以下几点: 利用各种设备的功能 平衡设备资源使用和推理结果的质量 通过流水线并行运行多个操作 确保时间序列数据同步正确 本框架解决了这些挑战,将上述软件框架解耦为数据流控制层、nn推理引擎层,以及UI层进行框架实现,把数据流处理管道构建为模块化组件,包括推理处理模型和媒体处理功能等。 其中数据流控制层包含三个大的模块 -- 视频流模块、图片和编辑模块、3D场景模块,每个模块提供可供配置的数据流参数接口,同时提供了一些常用的工具包如OpenCV、QVision等用于作为模型的数据输入和预处理。 nn推理引擎层则集成了一些移动端常用的推理框架比如SNPE、TensorFlow Lite等,并提供统一模板便于后续持续维护扩展其他推理框架。 UI层则封装好了图像渲染模块,以及各种调试控件。在API方面,该算法验证框架提供了Native/JAVA/Script三个层次的API,前两者可以在Android工程中进行快速模型集成,Script API则不需要编写任何APP 代码,通过文本脚本解析的形式配置模型推理选项。 通过以上功能使开发者可以专注于算法或模型开发,并使用本框架作为迭代改进其应用程序的环境,其结果可在不同的设备和平台上重现。 API接口说明 本框架提供了Native/JAVA/Script三个层次的API,前两者可以在Android工程中进行快速模型集成,其中Native为C/C++接口,提供JNI模板以及封装好的通信组件便于和JAVA进行数据交互;JAVA层则为Android API,使用和C++一样风格的进行封装,此外提供一些UI绘制函数接口;Script API则不需要编写任何APP 代码,通过文本脚本解析的形式配置模型推理选项。 举例在JAVA API下,算法模型在代码中的初始化方式如下,以高通平台的SNPE Runtime为例,只需要几行非常简单的代码即可加载并初始化模型: 如代码所示,模型文件的加载方式比较灵活,可以作为FileInputStream加载,也可以作为APP的Asset进行加载。 而图像数据的预处理和结果回调使用也非常简单,通过提供的OpenCV、QVison等CV库封装接口,可以方便地调取很多图像处理函数: 其中常用的一些操作比如数据的归一化等函数都经过底层优化,保证数据一致性和高效性,比如数据类型的转换使用了zero-copy: 同时OpenCV的编译开启了NEON指令、OpenMP多核等加速选项,对于图像的归一化等操作可以做到并行化加速 模型优化算法实现和工具封装 除了APP侧的接口外,本CV算法验证框架提供了一套配套的模型优化工具(暂未开放),包括: 模型8bit量化工具 模型结构化剪枝工具 模型转换工具 使用TensorFlow或者PyTorch等Training框架训练好的pb、pth、onnx等模型文件并不能直接在移动端进行部署运行,而是需要做一些模型转换工作,本框架将各种转换工具打包,提供了一套方便的模型转换工具。 其中的模型量化工具基于TensorFlow的TOCO、Pytorch的QNNPACK等实现。 剪枝工具则是根据论文Learning Efficient Convolutional Networks Through Network Slimming (ICCV 2017)提到的模型剪枝方法进行复现实现的。 模型转换工具和具体的Inference Runtime有关,比如SNPE则是使用DLC转换脚本、TensorFlow使用的是TF Lite转换工具等等。 转载自:https://github.com/peng-zhihui/DeepVision

计算机

计算机·圈子   首发

anna 发布了
问答

参数keep_graph在变量的backward()方法中是什么意思?

我正在阅读pytorch教程,并对retain_variable(不推荐使用,现在称为retain_graph)的用法感到困惑。代码示例如下: 文档中说明 keep_graph(布尔型,可选)–如果为False,将释放用于计算grad的图形。请注意,几乎在所有情况下都不需要将此选项设置为True,并且通常可以用更有效的方式解决它。默认为create_graph的值。 因此,通过设置retain_graph= True,我们不会在向后传递时释放分配给图的内存。保留此内存有什么好处,为什么我们需要它?

计算机

计算机·圈子   首发

阿托 更新了
资源

【Demo】识别中国二代身份证

识别中国二代身份证 一、写在开头 身份证识别,又称OCR技术。OCR技术是光学字符识别的缩写,是通过扫描等光学输入方式将各种票据、报刊、书籍、文稿及其它印刷品的文字转化为图像信息,再利用文字识别技术将图像信息转化为可以使用的计算机输入技术。 因为项目需要,所以这些天查阅了相关资料,想在网上看看有没有大神封装的现成的demo可以用。但是无果,网上关于ocr这一块的资料很少,比较靠谱的都是要收费的,而且价格也不便宜。但是在天朝,收费感觉心里不爽,所以就决定自己研究一番。 先上一个最终实现的效果(如果mac不是retain屏幕的,分辨率会有影响,需要在真机上调试) 二、需要用到的技术 搜了很多资料,发现要进行身份证号码的识别,需要用到以下几种技术: 图像处理技术 包括灰度化处理,二值化,腐蚀,轮廊检测等等。 1.灰度化处理:图片灰度化处理就是将指定图片每个像素点的RGB三个分量通过一定的算法计算出该像素点的灰度值,使图像只含亮度而不含色彩信息。 2.二值化:二值化处理就是将经过灰度化处理的图片转换为只包含黑色和白色两种颜色的图像,他们之间没有其他灰度的变化。在二值图中用255便是白色,0表示黑色。 3.腐蚀:图片的腐蚀就是将得到的二值图中的黑色块进行放大。即连接图片中相邻黑色像素点的元素。通过腐蚀可以把身份证上的身份证号码连接在一起形成一个矩形区域。 4.轮廊检测:图片经过腐蚀操作后相邻点会连接在一起形成一个大的区域,这个时候通过轮廊检测就可以把每个大的区域找出来,这样就可以定位到身份证上面号码的区域。 文字识别技术 通过识别图像,将图像信息转化为可以使用的计算机输入技术。比如下面这张包含一串数字的图片,通过ocr识别技术可以将图片中包含的数字信息以字符串的方式输出。 三、开源框架OpenCV和TesseractOCRiOS OpenCV(完成图像处理技术) OpenCV是一个开源的跨平台计算机视觉和机器学习库,通俗点的说,就是他给计算机提供了一双眼睛,一双可以从图片中获取信息的眼镜,从而完成人脸识别、身份证识别、去红眼、追踪移动物体等等的图像相关的功能。 TesseractOCRiOS(完成文字识别技术) Tesseract是目前可用的最准确的开源OCR引擎,可以读取各种格式的图片并将他们转换成各种语言文本。而TesseractOCRiOS则是针对iOS平台封装的Tesseract引擎库。 四、实战演示 创建一个iOS项目 用CocoPods导入上面两个库 由于OpenCV库文件比较大,所以时间会稍微久一点,耐心等待就是。 导入完成之后运行项目,会发现报如下错误 由于导入的库不支持Bitcode机制,需要关掉,在工程->TARGETS->Build Setting-> Enable Bitcode设置为NO就ok。 导入TesseractOCRiOS需要的语言包 TesseractOCRiOS库中没有自带的语言包,需要我们自己手动导入,我们这里直接到tesseract-ocr网站,tessdata即是我们需要用到的语言包。下载下来的语言包有400多兆。这里我们只需要用到英语语言包,所以就只导入eng.traineddata就ok,其他的都删掉。 导入语言包种需要注意几点: 语言包需要放在tessdata目录下。TesseractOCRiOS中查找语言包是在tessdata目录下进行查找的,所以我们不能单独把eng.traineddata导入项目中,而需要放在tessdata目录下导入项目中。 将tessdata导入xcode项目,需要勾选Create folder refrences。上面已经提到了语言包需要放在tessdata目录下,所以导入文件到xcode的时候需要创建文件夹的形式,而不是创建组的形式。如下图: 创建一个RecogizeCardManager用来管理身份证识别相关的代码 由于OpenCV和TesseractOCRiOS库都是基于c++编写的,所以需要把RecogizeCardManager.m后缀的.m改成.mm RecogizeCardManager中的代码 .h文件 .m文件 RecognizeCardViewController代码 故事版布局界面 .m文件 总结 通过上面的实验,该程序对身份证识别的正确率几乎可以达到90%,剩下的10%主要取决于图像的预处理,预处理程序是整个识别系统的关键所在。该系统的原理同样也适用于获取身份证上其他的信息,也可以应用于银行卡、车牌号等的识别。最后针对实现的效果进行一步总结。 识别的正确率 主要取决于腐蚀、取出身份证号码区域(轮廊提取)的算法这几个关键点。 腐蚀: 腐蚀的参数很重要,关于腐蚀的一些介绍,可以参考这篇文章 腐蚀与膨胀(Eroding and Dilating) 取出身份证号码区域的算法(轮廊提取): 所有的处理都是为了在图片中定位到身份证号码的区域,轮廊提取就是这样一个操作。筛选轮廊图的算法很重要但是也是个难点。我从这篇博客iOS身份证号码识别中找到了思路。要提取身份证号码区域的轮廊,算法的原理就是该轮廊的宽度是所有中最宽的,且宽度的长度必须大于高度的5倍。 不过这个算法还是存在不少问题。有的时候可能图片背景比较复杂会影响到轮廊的检测,基于这个问题: 一方面可以通过对图片的预处理来进行优化,减少对检测身份证号码区域的干扰 第二个方面就是优化算法。 识别速度 使用TesseractOCRiOS对比较清晰的文字进行识别速度是比较快的,我试过用一张未经处理的写着数字的图片来处理,识别速度小于5s。但经过二值图处理之后识别的速度就降低了,我认为可以对二值化处理后的图片进一步处理,比如对二值图进行细化描出骨架,然后在对骨架做均匀的膨胀处理,这样得到的身份证号码可能会清晰很多。 来源https://github.com/peaktangf/RecognizeCard

  • 1
  • 105
  • 106
  • 107
  • 168
前往