2021-01-22 09:00:31, 祝介东 北京力高泰科技有限公司
Dendrometer D1树体茎干生长记录仪。D1用于测量直径介于10-66cm的树体生长变化。如果树体直径超过66cm,可将两个卷尺相连,扩展量程。图源/developmentnews
尽管使用方便,搞过森林调查的都知道,每次调查完后输入数据都很累人。借助OCR 技术,如果我们能将一些必要信息直接在树木上挂牌(当然这是流行做法),然后拍照将其上面的信息读取,那么能减少很多数据输入工作。这里尝试使用 python
比较流行的一个 easyocr
库来尝试实现。
声明:我没有试过真实场景,仅仅探索其可能性,因为我上一次搞调查还是十几年前了。没照片,没数据,没测试真实情况,但想来应该不难,至少是部分实现起来不难。
整个测试使用的 anaconda + vscode,没有安装 CUDA,因为嫌弃英伟达麻烦,我不介意跑程序的这点时间,介意的可以安装。
我原来使用的 anaconda 用的是清华源,但有一段时间没装库,这次用一直报错,查了之后发现原来是清华被迫停止了服务 https://blog.csdn.net/sean2100/article/details/80998643。
1conda config --remove-key channels
不用清华源,恢复默认的源,这也是无奈之举。
创建一个虚拟环境,以免破坏我原来的依赖关系(这点python
做的挺好,当然也因为它太容易破坏依赖关系了,R
多数情况下还好):
1conda create -n easyocr python=3.8
话说我使用官方源也并不觉得多慢,可能是心里不急吧,随他下去,反正我有别的事情要做。
激活虚拟环境,在这个环境下进行相关操作:
1conda activate easyocr
在 pytorch 官方网站(https://pytorch.org/)进行选择,也就是选择与电脑相对应的版本:
其中,为了避免 CUDA 安装的麻烦,我选择了 NONE,也就是在 CPU 模式下使用,
1conda install pytorch torchvision torchaudio cpuonly -c pytorch
然后尝试使用清华的 PyPI 进行easyocr
的安装:
1pip install https://pypi.mirrors.ustc.edu.cn/simple/ easyocr
这个都说清华或中科大的国内源快,但我试了几次之后都报错,无法成功安装,最后用官方源的尝试了大概三四次安装成功了:
1pip install easyocr
历经艰辛,测试后无问题,终于安装完成了, import 一下该库,如果不报错,一切就 ok 了:
1(easyocr) C:\\Users\\ASUS>ipython
2Python 3.8.5 (default, Sep 3 2020, 21:29:08) [MSC v.1916 64 bit (AMD64)]
3Type ''copyright'', ''credits'' or ''license'' for more information
4IPython 7.19.0 -- An enhanced Interactive Python. Type ''?'' for help.
5
6In [1]: import easyocr
7Matplotlib is building the font cache; this may take a moment.
8
9In [2]:
正常导入,没有问题,波折当然算作是网络的锅。
vscode
选择创建的虚拟环境:
ctr+shift+p -> python: select interperter ,然后找到刚才新建的 easyocr
虚拟环境即可。不多说,直接看看其识别能力。
测试图片为网上搜的蒙古栎的挂牌:
处理一张图片的用法很简单
1from os import listdir
2import easyocr
3
4reader = easyocr.Reader([''ch_sim'',''en''])
5print(result)
结果为:
1[([[187, 1], [447, 1], [447, 91], [187, 91]], ''蒙古栎'', 0.9842442870140076), ([[0, 91], [129, 91], [129, 135], [0, 135]], ''拉丁名:'', 0.860361635684967), ([[138, 91], [459, 91], [459, 143], [138, 143]], ''Quercus mongolica'', 0.4963034391403198), ([[0, 128], [322, 128], [322, 176], [0, 176]], ''科`属:壳斗科栎属'', 0.44434353709220886), ([[0, 166], [462, 166], [462, 214], [0, 214]], ''原产地:`中国.俄罗斯.日本'', 0.40092286467552185), ([[243, 200], [630, 200], [630, 250], [243, 250]], ''极度耐寒.保持水土能力'', 0.6140349507331848), ([[67, 207], [225, 207], [225, 251], [67, 251]], ''征:喜光'', 0.9321740865707397), ([[0, 209], [41, 209], [41, 251], [0, 251]], ''特'', 0.9985476136207581), ([[138, 237], [560, 237], [560, 288], [138, 288]], ''极强.能防止火灾快速蔓延'', 0.9191053509712219)]
有点小小的误差,但看上去只是最后一行字太多,然后排列不规则的原因,因为字是都识别了。如果想一下子看到需要的内容,而不带边框坐标以及判断的准确率,则可以:
1reader.readtext(''mgl.png'', detail = 0)
结果对人眼比较友好:
1[''蒙古栎'',
2 ''拉丁名:'',
3 ''Quercus mongolica'',
4 ''科`属:壳斗科栎属'',
5 ''原产地:`中国.俄罗斯.日本'',
6 ''极度耐寒.保持水土能力'',
7 ''征:喜光'',
8 ''特'',
9 ''极强.能防止火灾快速蔓延'']
那怎么结合 D1 来用呢?每棵树都挂牌了,如果仅仅是记录 D1 数据最简单了,每棵树拍两幅图片,一副是需要的挂牌信息,另一幅为 D1 数据,拍完走人,回办公室程序处理挂牌信息(间隔一个图片,也就是 D1 的读数照片,读取照片即可,非常简单),自己读取 D1 数据(OCR 搞定 D1 很难)。这样我们不必在样地耽搁太久,也不用担心读数出错,处理数据时如果发现问题,回去核对图片就好了。办公室怎么也比林子舒服。
假定我们进行的是大样地调查,那么我们很难按照一定顺序来记录数据,怎么做省事呢?我觉得可以这么试试:
两人一组,分为若干组,每组负责样地的几个区域。
一人负责拍照,一人负责记录树木生长数据(也可回办公室再通过照片读取)或其他数据,照片的顺序即记录数据的顺序,名字等简单信息有照片提供,不做记录。
批量处理照片数据的中文名和拉丁名等,整理成列,直接拷到记录数据的 excel 里即可对应上。
合并所有人的数据。
那么我们简单看一下批处理的程序怎么做(我们样地的标牌不会搞得和上面的图一样不正规,这种图片毕竟是给游客看的,我们挂牌当然无需这些特征原产地之类的东西,同时我们拍照也尽量只拍需要的部分,这样能降低处理的量):
使用的图片是网上随便找的,大概这个样子,只能意思一下了,我没有找到清晰的一致的图片,我们的样地自然不是这个样子的:
其中京桃这个图片,没有找到高清图片,像素有点低,所以识别率差。我们直接上代码(此处为演示,上完整代码和 print
的结果):
1from os import listdir
2import easyocr
3
4reader = easyocr.Reader([''ch_sim'',''en''])
5
6picture_name = []
7dir_path = r''./plant/''
8png_files = listdir(dir_path)
9for filename in png_files:
10 # display png names
11 print(filename)
12 result = reader.readtext(filename, detail = 0)
13 # print each picture results
14 print(result)
15 with open (''species.txt'', ''a'') as f:
16 f.write(result[0])
17 f.write(''\\n'')
18 picture_name.append(result[0])
19print(picture_name)
终端上显示的结果为
1jt.png
2[''京桃'', ''Prunus porsica1 rubro plena'', ''拉丁名:'', ''[:444444'', ''科'', ''原产地:申臼西北.华北:华东.西南'', ''征:阳性$光.耐2拊甲'', ''特'']
3
4mgl.png
5[''蒙古栎'', ''拉丁名:'', ''Quercus mongolica'', ''科`属:壳斗科栎属'', ''原产地:`中国.俄罗斯.日本'', ''极度耐寒.保持水土能力'', ''征:喜光'', ''特'', ''极强.能防止火灾快速蔓延'']
6
7ym.png
8[''杨梅'', ''科属:杨梅科'', ''学名:'', ''Myrica rubra'', ''常绿乔木6_耐阴,喜温'', ''习性'', ''暖湿润气候,不耐寒,'', ''观果乔木6'']
9
10[''京桃'', ''蒙古栎'', ''杨梅'']
这里的代码是将内容输出到文件,例如输出为 txt 的格式,结果如下图:
当然了,实际使用过程中,要么直接存 txt,然后在 excel 分列,要么输出到 picture_name
的 list 中,直接用 pandas
将该 list 导出为 excel 格式,无需这么麻烦,此处仅作演示。
想了解Dendrometer D1树体茎干生长记录仪的更多信息?请点击「阅读原文」。
02-29 英诺德INNOTEG
龙年新品上线!LAUDA 首款可移动式超低温冰箱!02-29 LAUDA
实用建议:如何合理设计稳定的冻干蛋白配方(二)02-29 莱奥德创
【精彩回放】类器官超全研发进展和应用趋势02-29 美谷分子仪器
开春启航,丹纳赫中国生命科学研究院创新技术课程2024全年预告02-29 美谷分子仪器
您了解 IDBS 吗?欢迎通过这篇文章了解无限潜能的 IDBS02-29 美谷分子仪器
在小分子领域挖呀挖,高通量筛选技术助力“鸟枪换炮”02-29 Viny
【课程预告】创新药物高通量筛选技术(现场联动课)02-29 美谷分子仪器
【产品特色】DispenCell 单细胞分离系统让您温和高效分离单细胞02-29 美谷分子仪器
新一代VELP杜马斯定氮仪——实力提升,智慧升级!02-29
微波消解 ICP-AES法测定防锈颜料三聚磷酸铝中重金属的含量02-29 美诚
新污染物检测方案|GCMSMS法测定土壤中的毒杀芬02-29 市场部
特色方案|明胶空心胶囊中环氧乙烷及2-氯乙醇的测定02-29 市场部
日剧日影中的岛津制作所02-29
东方甄选带货又翻车!这款网红饮品被海关点名,曾被检出泻药成分02-29
信立美科 离子色谱,简化测定流程,一次进样检测多种离子,高效稳定02-29 cici
线上直播 | HJ1317-2023、新污染物 环境新标解读02-29
项目文章 | 二硫键:马铃薯面团加工的“改良密码”02-29
展会邀请丨相约CHINA LAB 2024,睿科集团解决方案一睹为先02-29
碳酸锂含量的测定02-29