周分享 2018/08/19

我和小伙伴私下有一个周分享的活动,每周互相分享一下技术。之前的分享没有做好笔记,所以分享的效果并不是很好,只是讲一讲自己学到的,而没有动手时间。这周开始,加入讲一题出一题模式,这样就可以很好检验分享之后的学习情况。相关代码会同步到我的github上.

这周我要分享的东西有两个,一个是shell相关的。一个是tesseract训练相关的。
先来一个简单的题。
清除日志脚本。

shell

clean.sh

cd /var/log
cat /dev/null > messages
echo 'logs cleaned up.'
## 注:/var/log/messages 是系统的日志文件。

这里可以把/dev/null看作”黑洞”. 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到.
这个脚本写完了,有没有什么问题?
如果有问题,需要怎么改?

思考之后继续朝下看

这个脚本的问题有:如果不是root用户就无法执行清理日志。
没有任何的流程控制语句,简单的说就是顺序操作。

修改之后的写法

better_clean.sh

#!/bin/bash
# 清除日志脚本
LOG_DIR=/var/log
ROOT_UID=0 #$UID为0的时候,用户才具有root用户的权限。
if [ "$UID" -ne $ROOT_UID ]
then
    echo 'must be root to run this script'
    exit 1
fi

cd $LOG_DIR || {
    echo 'Cannot change to necessary directory.'>&2
    exit 1
}
cat /dev/null > message && echo "Logs cleaned up."
exit 0
# 退出之前返回0表示成功,返回1表示失败。
补充:
shell上: 
0表示标准输入 
1表示标准输出 
2表示标准错误输出
默认为标准输出重定向,与 1> 相同 
2>&1 意思是把 标准错误输出 重定向到 标准输出. 
&>file 意思是把 标准输出 和 标准错误输出 都重定向到文件file中

总结

必须是root才能执行脚本,否者退出。
成功切换目录,否则退出。
清理日志,清理成功,退出。

彩蛋

清空日志及文件内容的三种方法。

echo > test.log
>test.log
cat /dev/null >test.log

tesseract

tesseract 就是一个开源的文字识别工具,要想很好的识别,需要使用jTessBoxEditor这个工具。
我分享一下window下怎么弄。
1.安装tesseract和jTessBoxEditor

2.选择是否多个图合并成一张tiff格式图片。这里面的jTessBoxEditor里面有一个merge Tiff的操作。选择图片之后点击即可。

3.Make Box Files. (很重要的一步)

tesseract.exe orderNo.tif orderNo batch.nochop makebox
分别解释一下。
tesseract是执行程序,orderNo.tif其实是[lang][fontname]exp[num] tif
语言+字体类型+exp+一个数+tif
类似 chi_sim.timesitalic.exp0.tif 这个tif文件是需要你自己转换的,然后命名改成上面这个。 单独的orderNo是要生成的box文件的名字。 后面的参数是固定的。

4.之后用jTessBoxEditor 打开orderNo.tif文件,注意orderNo.tif文件必须要和刚刚生成的box文件在同一个目录下面。否则打开也是无效的。
打开之后修改,逐个矫正,保存。

5.Run Tesseract for training

tesseract name.tif  name nobatch.box.train

6.Compute the CharacterSet

unicharset_extractor.exe orderNo.box # 注意,这里的unicharset_extractor是tesseract包里面自带的。

7.接下来需要新建一个文件, font_propeties.输入文本 orderNo. 0.0.0.0.0
并执行命令 mftraining.exe -font-properties -U unicharset orderNo.tr

8.Clustering 输入命令 cntraining.exe orderNo.tr
输入命令: combine_testdata.exe orderNo
必须确认的是第2,4,5,6行的数据不是-1.

9.此时目录下的”orderNo.traindata’的文件要拷贝到tesseract程序的目录下的’tessdata’目录

10.以后就可以使用该字典识别了。
tesseract.exe test.jpg result -l orderNo

https://github.com/guowenjia/share_code

猜你喜欢

转载自blog.csdn.net/funnyPython/article/details/81839681