我们将学习如何使用opencv检测图像中的QR码和条形码,我们首先了解一下基础知识,然后我们将继续创建一个身份验证项目,在该项目中,根据上的QR码检查人是否被授权或未经授权。
在python中,我打开一个新项目,第一件事是要导入我们所需要的库
代码如下:
import cv2
import numpy as np
from pyzbar.pyzbar import decode # 从pyzbar中导入解码器
img = cv2.imread('3.webp')
cap = cv2.VideoCapture(0) # 调用摄像头
cap.set(3, 640) # 设置宽度ID等于3,宽640
cap.set(4, 480) # 设置高度ID等于4,宽480
while True:
success, img = cap.read() # 成功读取相机中的图像
for barcode in decode(img):
print(barcode.data) # 打印解码数据
myData = barcode.data.decode('utf-8')
print(myData) # 打印我的解码数据
pts = np.array([barcode.polygon], np.int32)
pts = pts.reshape((-1,1,2))
cv2.polylines(img,[pts],True,(255,0,255),5)
pts2 = barcode.rect
cv2.putText(img,myData,(pts2[0],pts2[1]),cv2.FONT_HERSHEY_SIMPLEX,0.9,(255,0,255),2)
cv2.imshow('Result', img)
cv2.waitKey(1)
检查二维码是否在授权范围之内:
import cv2
import numpy as np
from pyzbar.pyzbar import decode
img = cv2.imread('3.webp')
cap = cv2.VideoCapture(0)
cap.set(3, 640)
cap.set(4, 480)
with open('myDataFile') as f:
myDataList = f.read().splitlines()
while True:
success, img = cap.read()
for barcode in decode(img):
print(barcode.data)
myData = barcode.data.decode('utf-8')
print(myData)
if myData in myDataList:
myOutput = 'Authorized'
myColor = (0, 255, 0)
else:
myOutput = 'Un-Authorized'
myColor = (0, 0, 255)
pts = np.array([barcode.polygon], np.int32)
pts = pts.reshape((-1,1,2))
cv2.polylines(img,[pts],True,myColor,5)
pts2 = barcode.rect
cv2.putText(img,myOutput,(pts2[0],pts2[1]),cv2.FONT_HERSHEY_SIMPLEX,0.9,myColor,2)
cv2.imshow('Result', img)
cv2.waitKey(1)
Original: https://blog.csdn.net/qq_60678226/article/details/124711446
Author: 啥都想学点的研究生
Title: 如何使用opencv检测二维码和条形码
相关阅读1
Title: 人工智能(AI)库TensorFlow 踩坑日记之二
这个库里面主要是一些常用的模型用tensorflow实现之后的代码。其中我用的是
models/tree/master/tutorials/image/cifar10 这个示例,上一篇也大致讲过了。
关于上次遇到问题是:
虽然训练了很多次,但是每次实际去用时都是相同的结果。这个问题主要原因是
在核心代码文件cifar10.py里
被我改成 batch_size =1
一开始我误以为这个batch要跟训练文件的.bin 文件里面的图片数量对应,其实不然。这个batch_size 是为了用
cifar10_input.py
创建一个图片跟标签的队列,每个队列128个元素,便于分布式处理。
由于改成1之后可能是影响是训练效果。导致整体的loss很高,所以识别率很差。有待进一步验证。
2018-03-11 修正
batch_size 作用就是一次性训练这么多次之后才开始做梯度下降,这样loss 的波动不会太大。
2018-06-19 补充
看完这篇文章之后终于对batch_size 有了一个更深刻的理解。就是越小的batch会导致局部的梯度波动大,难以收敛。
另外一个原因很可能是最致命的
上一篇讲到label的对应方式是
label 也是用string_input_producer 做了另外一条字符串队列
这其实是错误的,因为两条队列要完美保持一致,而且还不能加shuffle 参数 这个参数可以随机获取图片文件,以便训练模型效果更具备泛化能力。
shuffle=true 还是要加的。
label的获取方式就得另外想办法。
把 cifar10_input.py 方法 read_cifar10 改造如下:
其中 splitilenames ,diff 方法是我新增的,主要是为了把文件所在目录的路劲切出来
比如"H:\imagenet\fortest\n01440764" 切出来 "n01330764"。 这个方法是支持批量处理的。
之所以写的这么麻烦。是因为输入量是tensor,所以所有操作都必须按照tensorflow的api写。
diff方法(代码在下面) 是为了判定key 的分类名在所有分类里面的文件排序位置(数字0-1000以内)。用这个位置作为label。
这里 读者估计有一个疑问
"为啥不直接用分类名'n01330764'作为label标签去训练呢?"
这里也是迫于无奈,因为原始代码cifar10的后续功能有2个限制,1,label必须是int型,2label最大值不能大于分类总数。所以不能简单把"n"删除然后转成数字 1330764 。
否则会出各种错。修正这2个问题明显比我新增一个diff方法改动更大。
虽然不太优雅,各位看官轻拍。
2018-06-19 修正
后来这里取label的方法还是换成文件夹按字母排序后的位置作为label了。这样保险很多,而且性能也好一些。
好了,到止为止,train(训练过程)的代码就改完了,可以开始训练了。
cifar10_eval.py 这边需要改个地方。
通过参数传入 单图片的地址,用来放到生产环境执行识别程序。
先跑一下8.jpg 测试一下
得出来结果是0 之所以有这么多,是因为
cifar10_eval 原来的代码用了一部分跟训练代码一致的过程,其中训练代码中batchsize=128,导致虽然输入只有1张图,输出的结果还是有128个。有点多余,不过取其中一个作为结果就可以了。(这里可以在把batchsize改为1,只在运行时用1)
然后我用C# MVC写了一个页面。用来上传图片,然后输出中文结果。
主要核心代码是(C#):
主要是把图片改为 32*32 然后用Process 拉起python 去执行 cifar10_runsingle.py (这个是cifar10_eval.py 改造后的)。
然后用正则把 结果的数字切出来。
剩下就是把位置比如 0替换成"n01330764"
测试一下
Original: https://www.cnblogs.com/7rhythm/p/7270207.html
Author: 鬼柒
Title: 人工智能(AI)库TensorFlow 踩坑日记之二
相关阅读2
Title: 微信公众平台开发(121) 微信二维码海报
关键字:微信公众平台 二维码 海报
作者:方倍工作室
原文: http://www.cnblogs.com/txw1958/p/weixin-poster.html
本文介绍微信公众平台下二维码海报的开发过程。
一、微信二维码海报介绍
微信二维码海报是指在海报中嵌入和微信用户关联的参数二维码的海报,用户分享推广之后,新用户可以被统计为被推广人员数,从而达到增加粉丝的传播效果。其使用场景如下:
二、开发流程
在微信二维码海报生成中,需要用到以下信息
-
自定义菜单中设置一个菜单项,点击后返回二维码海报给用户
-
接口接收到菜单点击之后,获取用户的头像、ID(可以使用OpenID)
-
生成和用户关联的参数二维码,
-
将参数二维码进行缩放
-
将头像和参数二维码合并成新的参数二维码图片
-
将新参数二维码图片做为水印合成到背景海报中
-
将用户昵称,以及二维码时间戳(类型为临时二维码时)等文字合成到背景海报中
-
将海报上传成临时图片素材
-
将图片素材使用客服接口发送给用户。
三、微信素材准备
海报底图如下
3.1 生成自定义菜单
菜单的生成方法,请参考《微信公众平台开发(58)自定义菜单》以及方倍工作室的书籍《微信公众平台开发最佳实践(第2版)》
本项目中使用的菜单JSON为
3.2 获取用户基本信息
使用方倍工作室SDK获取用户基本信息的方法如下
//获取用户信息
$userinfo = $weixin->get_user_info($openid);
var_dump($userinfo);
//获取用户头像 64像素
$headimgurl = substr($userinfo['headimgurl'],0,strripos($userinfo['headimgurl'], "/"))."/64";
var_dump($headimgurl);
// $headimgurl = "http://wx.qlogo.cn/mmopen/R9V6295VOlibNsicszoREqUF2CiaY8hL5fFt0D8DykUCjJ8ia4rQicbYViax3A2V0am2oUEWvw5awGia0tmwQEbI0tAu4kkCL7Eiaeia7/64";
需要注意的是,用户默认头像是640像素的大图,将其切换成64位像素大小,以便放置在二维码中间。
同样的,用户基本信息的获取方法,请参考《微信公众平台开发(76) 获取用户基本信息 》以及方倍工作室的书籍《微信公众平台开发最佳实践(第2版)》
用户头像信息如下所示
3.3 生成参数二维码
使用方倍工作室SDK获取用户基本信息的方法如下
//创建永久二维码,参数为用户openid
$qrcodeinfo = $weixin->create_qrcode("QR_LIMIT_STR_SCENE", $openid);
var_dump($qrcodeinfo);
$qrcodeurl = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=".urlencode($qrcodeinfo["ticket"]);
var_dump($qrcodeurl);
// $qrcodeurl = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=gQHf7zoAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL05rUGlyTXJsd2hxN3BCUnFNbTlNAAIEu1X8VwMEAAAAAA%3D%3D";
参数二维码可以考虑使用永久字符串的,也可以考虑使用临时数字,临时数字优点没有上限限制,缺点是有有效期。永久的则相反。
同样的,参数二维码的获取方法,请参考《微信公众平台开发(83) 生成带参数二维码》以及方倍工作室的书籍《微信公众平台开发最佳实践(第2版)》
参数二维码如下所示
四、微信二维码海报生成
4.1 二维码缩放
微信二维码默认是430像素,将其缩放成300像素,核心代码如下
imagecopyresampled($qrcode_thumb, $qrcode_source, 0, 0, 0, 0, 300, 300, 430, 430);
4.2 头像合成到二维码图片上
核心代码如下
imagecopy($qrcode_thumb, $head_source, 118, 118, 0, 0, 64, 64);
合成后,效果如下
4.3 二维码合成到海报中
核心代码如下
//加水印
imagecopy($dst_qr, $qrcode_thumb, 212, 410, 0, 0, 300, 300); //水印位置
4.4 文字合成到海报中
核心代码如下
imagettftext($dst_qr, 30, 0, 40, 85, $textcolor, $font, $text);
合成后效果如下
五、素材上传与发送
5.1 上传临时图片素材
使用方倍工作室SDK上传图片素材的方法如下
//将图片上传临时图文素材
$material = $weixin->upload_temporary_material("image", $filename); //logo.jpg须放于类同目录,注意路径
var_dump($material);
$mediaid = $material["media_id"];
// array(3) { ["type"]=> string(5) "image" ["media_id"]=> string(64) "21Lz-eMFoSsA_R5gLOUJOqxbGw6YEEPRQq-UjHVbU6q64VyUBUqt7B8252ySPKdt" ["created_at"]=> int(1487213817) }
上传后,获得图片的media_id
5.2 使用客服接口发送图片
使用方倍工作室SDK发送图片的方法如下
//客服接口发送临时图片素材
$send_result = $weixin->send_custom_message($openid, "image", array('media_id'=>$mediaid));
var_dump($send_result);
六、演示
关注方倍工作室微信公众账号,点击菜单"我的海报"
六、源码
联系QQ 1354386063
Original: https://www.cnblogs.com/lanzhi/p/6467357.html
Author: 岚之山
Title: 微信公众平台开发(121) 微信二维码海报
相关阅读3
Title: 【NeRF】背景、改进、应用与发展
推荐阅读:
主要参考文献:https://zhuanlan.zhihu.com/p/512538748
GIRAFFE[12]再次凭借隐式表示中的物体编辑和组合获得CVPR2021年的best paper 。
3D场景表征可分别为:
- 显式 (explicit representaion)
- Mesh
- Point Cloud
- Voxel
- Volume
- 隐式(implicit representation)
- 使用函数来对场景集合进行描述。
显式 vs 隐式
NeRF首次利用隐式表示实现了照片级的视角合成效果,与之前方法不同的是,它选择了Volume作为中间表示,尝试重建一个隐式的Volume。
NeRF的主要贡献:
- 提出了一种5D的神经辐射场来作为复杂场景的隐式表示。
- 基于经典的volume rendering技术提出了一种可微渲染的过程。
- 提出了位置编码(positional encoding)将5D输入映射到高维空间。
2.1 神经场(Neural field)
推荐阅读: Neural Fields in Visual Computing and Beyond[1]
简单来说:场(field)是为所有(连续)空间和/或时间坐标定义的量(标量),如电磁场,重力场等。此当我们在讨论场时,我们在讨论一个连续的概念,而且他是将一个高维的向量映射到一个标量。
神经场表示用神经网络进行全部或者部分参数化的场。 我们可以理解为, 神经场是以空间坐标或者其他维度(时间、相机位姿等)作为输入,通过一个MLP网络模拟目标函数,生成一个目标标量(颜色、深度等)的过程。
2.2 体绘制(volume rendering)
推荐阅读:State of the art on neural rendering[2]
简而言之,是个从3D的表达到2D图片的过程。
体数据的渲染主要是指通过追踪光线进入场景并对光线长度进行某种积分来生成图像或视频,具体实现的方法包括:Ray Casting,Ray Marching,Ray Tracing。
NeRF存在的问题
- 计算速度慢
- 只针对静态场景
- 泛化性差
- 需要大量视角
3.1 针对速度慢的问题
NeRF方法生产生图像时,每个像素都需要近200次MLP深度模型的前向预测。尽管单次计算规模不大,但逐像素计算完成整幅图像渲染的计算量还是很可观的。其次,NeRF针对每个场景需要进行训练的时间也很慢。
针对这个问题的研究工作有:
- AutoInt[3]
- FastNeRF[20]
- Depth-supervised NeRF[4]
3.2 只适用于静态场景的问题
NeRF方法只考虑了静态场景,无法拓展到动态场景。这一问题主要和单目视频做结合,从单目视频中学习场景的隐式表示。
针对这个问题的研究工作有:
- Neural Scene Flow Fields[5]
3.3 针对泛化性差的问题
NeRF方法针对一个新的场景需要重新训练,无法直接扩展到没有见过的场景,这显然与人们追求泛化性的目标相违背。
针对这个问题的研究工作有:
- GRF[6]
- IBRnet、
- pixelNeRF
3.4 针对需要大量视角数量的问题
尽管NeRF方法能够实现出色的视角合成效果,但是它需要大量的(数百张)视角来进行训练,这限制了它在现实中的应用。
针对这个问题的研究工作有:
- pixelNeRF[7]
- Urban-NeRF
- Block-NeRF
4.1 逆渲染
从真实数据中估计不同模型参数(相机、几何体、材质、灯光参数)的过程称为 反向渲染(逆渲染),其目的是生成新视图、编辑材质或照明,或创建新动画[2]。
主要任务有:
- 几何与代理几何:NerfingMVS[9]用SfM估计的稀疏深度来监督单目深度估计网络,调整其尺度,然后再输入NeRF网络中实现视角一致性。ICCV2021 oral
- 照明:NeRV[10]以一组由无约束已知光照照亮的场景图像作为输入,并生成一个可以在任意光照条件下从新视点渲染的三维表示。
- 相机(位姿估计):Self-Calibrating[11]在没有任何校准对象的情况下,共同学习场景的几何结构和精确的相机参数,提出了一张适用于具有任意非线性畸变的普通摄像机的摄像机自标定算法
4.2 可控编辑
虽然NeRF提供了对场景合理的表示,但是它并不允许人们对形状、外观进行编辑。对场景表示进行可控的编辑,是NeRF发展的一个重要方向。
编辑的方向主要包括:形状、外观、场景组合。
相关工作有:
- EidtNeRF[21]
- GRAF[22]
- GIRAFFE (CVPR2021 Best Paper)
这些方法主要通过GAN和NeRF结合,实现了可控的编辑。
4.3 数字化人体
数字化人体是立体视觉中的一个重要领域。NeRF跟其他3D场景表征一样,也被应用于对人体进行建模。数字化人体主要包括:
- 脸部建模: 4D Facial Avatar[14]将3DMM和NeRF结合,实现了一个动态神经辐射场。输入一个单目视频,该方法能够实现人脸的位姿、表情编辑。
- 人体建模: Animatable[15]引入神经混合权重场来产生变形场,实现了人体建模。需要输入多视角视频。这个领域目前主要向SMPL靠近,就是给定一个规范空间,或者说template,然后从不同观测空间估计规范空间。
- 手部建模。
4.4 多模态
目前基于NeRF的扩展工作,大部分使用的是图像、单目视频作为输入。探索其他模态如文字、音频等与图像的结合,能够催生惊艳的应用效果。
相关工作有:
4.5 图像处理
NeRF作为一种隐式表示,为传统的图像处理方法提供了一种新思路,即从隐式神经表示,或者神经场的角度来处理图像。这里的图像处理方法包括:压缩、去噪、超分、inpainting等。
相关工作有:
- Neural Knitworks[17]提出了一种用于自然图像神经隐式表示学习的体系结构,它通过以对抗的方式优化图像补丁的分布,并通过增强补丁预测之间的一致性来实现图像合成
4.6 视频处理
使用神经场的方法来进行视频压缩、视频编辑。这些方法证明了单目视频与NeRF或者神经场方法结合会是一个重要方向。
相关工作有:
- Layered Neural Atlases[18]提出了一种将输入视频分解并"展开"为一组分层2D地图集的方法,每个地图集都提供了视频上对象(或背景)外观的统一表示。该文章能够用一组参数来存储视频,能够实现令人惊艳的编辑效果。
4.7 特征领域
特殊领域包括:
- 机器人
- 医疗成像;
在医疗成像中,如CT和MRI,传感器探测的数据是人不可读的,需要经过离散采样并重建成体数据(3D)或者切片(2D)供人类观看。如果能够减少采样率,则可以减少CT和MRI的时间。NeRP[19]提出一种在稀疏采样下进行神经场重建的框架,并证明可以推广到医疗图像中。 -
偏微分方程求解
-
NeRF和神经场与单目视频的结合。这种结合已经催生了非常多高质量的工作和惊艳的效果,不管是Video for NeRF还是NeRF for Video,都是非常具有实用价值的。
- 多模态。图像与图像,文本与图像,视频与图像等。针对NeRF多模态的研究目前还比较少, CLIP-NeRF为我们研究提供了基础,这表明这个方向是可以继续发掘的,比如更加复杂的场景的多模态控制或者编辑。
- 在低级语义上的探索并没有特别完备,如去噪,图像恢复等。这一部分工作目前还没有成型的工作,是一片蓝海,如果能够基于隐式表示对这种视觉的Inverse Problem提出一个解决框架,是非常有意义的。
- 数字化人体,尤其是 人脸建模。人脸永远是应用最快最广泛的技术,这部分的工作也刚刚开始,值得关注。
- 可控编辑。正如3D MM催生了很多基于3D表示解耦的方法,隐式表示如何提取可控量,实现可控编辑,是未来的一个重要方向。
- 从另一个角度来看:NeRF存在的问题与实际应用可以进行组合,也可以催生新的方法。
参考文献
1、Xie Y, Takikawa T, Saito S, et al. Neural Fields in Visual Computing and Beyond[J]. arXiv preprint arXiv:2111.11426, 2021.
2、Tewari A, Fried O, Thies J, et al. State of the art on neural rendering[C]//Computer Graphics Forum. 2020, 39(2): 701-727.
3、Lindell D B, Martel J N P, Wetzstein G. Autoint: Automatic integration for fast neural volume rendering[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2021: 14556-14565.
4、Deng K, Liu A, Zhu J Y, et al. Depth-supervised nerf: Fewer views and faster training for free[J]. arXiv preprint arXiv:2107.02791, 2021.
5、Li Z, Niklaus S, Snavely N, et al. Neural scene flow fields for space-time view synthesis of dynamic scenes[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2021: 6498-6508.
6、Trevithick A, Yang B. Grf: Learning a general radiance field for 3d representation and rendering[C]//Proceedings of the IEEE/CVF International Conference on Computer Vision. 2021: 15182-15192.
7、Yu A, Ye V, Tancik M, et al. pixelnerf: Neural radiance fields from one or few images[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2021: 4578-4587.
8、Barron J T, Mildenhall B, Tancik M, et al. Mip-nerf: A multiscale representation for anti-aliasing neural radiance fields[C]//Proceedings of the IEEE/CVF International Conference on Computer Vision. 2021: 5855-5864.
9、Wei Y, Liu S, Rao Y, et al. Nerfingmvs: Guided optimization of neural radiance fields for indoor multi-view stereo[C]//Proceedings of the IEEE/CVF International Conference on Computer Vision. 2021: 5610-5619.
10、Srinivasan P P, Deng B, Zhang X, et al. Nerv: Neural reflectance and visibility fields for relighting and view synthesis[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2021: 7495-7504.
11、Jeong Y, Ahn S, Choy C, et al. Self-calibrating neural radiance fields[C]//Proceedings of the IEEE/CVF International Conference on Computer Vision. 2021: 5846-5854.
12、Niemeyer M, Geiger A. Giraffe: Representing scenes as compositional generative neural feature fields[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2021: 11453-11464.
13、Gafni G, Thies J, Zollhofer M, et al. Dynamic neural radiance fields for monocular 4d facial avatar reconstruction[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2021: 8649-8658.
14、Gafni G, Thies J, Zollhofer M, et al. Dynamic neural radiance fields for monocular 4d facial avatar reconstruction[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2021: 8649-8658.
15、Peng S, Dong J, Wang Q, et al. Animatable neural radiance fields for modeling dynamic human bodies[C]//Proceedings of the IEEE/CVF International Conference on Computer Vision. 2021: 14314-14323.
16、Wang C, Chai M, He M, et al. CLIP-NeRF: Text-and-Image Driven Manipulation of Neural Radiance Fields[J]. arXiv preprint arXiv:2112.05139, 2021.
17、Czerkawski M, Cardona J, Atkinson R, et al. Neural Knitworks: Patched Neural Implicit Representation Networks[J]. arXiv preprint arXiv:2109.14406, 2021.
18、Kasten Y, Ofri D, Wang O, et al. Layered neural atlases for consistent video editing[J]. ACM Transactions on Graphics (TOG), 2021, 40(6): 1-12.
19、Shen L, Pauly J, Xing L. NeRP: Implicit Neural Representation Learning with Prior Embedding for Sparsely Sampled Image Reconstruction[J]. arXiv preprint arXiv:2108.10991, 2021.
20、Garbin S J, Kowalski M, Johnson M, et al. Fastnerf: High-fidelity neural rendering at 200fps[C]//Proceedings of the IEEE/CVF International Conference on Computer Vision. 2021: 14346-14355.
21、Liu S, Zhang X, Zhang Z, et al. Editing conditional radiance fields[C]//Proceedings of the IEEE/CVF International Conference on Computer Vision. 2021: 5773-5783.
22、Schwarz K, Liao Y, Niemeyer M, et al. Graf: Generative radiance fields for 3d-aware image synthesis[J]. Advances in Neural Information Processing Systems, 2020, 33: 20154-20166.
Original: https://blog.csdn.net/NGUever15/article/details/124941338
Author: _Summer tree
Title: 【NeRF】背景、改进、应用与发展

语音处理/语音识别基础(四)- 语音文件读取与播放

有意义的学习,都要先回答三个问题

语音识别(ASR)论文优选:车内场景粤语指令数据集CI-AVSR: A Cantonese Audio-Visual Speech Dataset for In-car Command Recogni

人脸识别_人脸识别及其应用

【计算机视觉 01】Yolo v5 安装步骤

【工业相机】【深度4】线扫描相机 – 选型实践

T5L芯片做主控在车载控制器行业的应用

聚类算法(Clustering Algorithms)之层次聚类(Hierarchical Clustering)

双向长短期记忆网络(Bi-LSTM)

OCR文字识别技术总结(三)

机器学习实战:用SVD压缩图像

Addictive_Attention和Dot_Production_Attention 读书笔记

详细实操分享,一个月收益6000,每天2小时复制粘贴

React Hooks 的实现必须依赖 Fiber 么?
