一、FuzzyOcr简介
部分垃圾邮件采用图片或PDF的方式来发送邮件,这些垃圾邮件在图片内容加入大量的噪声数据(noisy data),以避开扫描引擎的侦测。
FuzzyOcr是利用光学字符识别(OCR)的方式,来识别图像邮件所包含的文字信息,并利用Fuzzy matching算法,辨别出里面的文字;
FuzzyOcr的功能:
1、光学字符识别使用不同的引擎和设置;
2、模糊词匹配算法应用于光学字符识别结果;
3、图像散列系统,以了解已知的垃圾邮件图像独特属性;
4、尺寸,大小和完整的图像检查;
5、内容类型核查包含电子邮件;
6、匹配和学习技巧;
7、支持DB,可将处理过的图片,以feature vectors的形态储存在数据库,因此相同或是类似的图片,便可以利用储存在DB的特征向量来处理;
二、配置FuzzyOcr
1、安装依赖
# rpm -ivh
http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm# yum install giflib-utils gifsicle netpbm-progs ocrad gocr perl-String-Approx
2、安装FuzzyOcr
# rpm -ivh spamassassin-FuzzyOcr-3.6.0-9.noarch.rpm
3、配置FuzzyOcr
FuzzyOcr的配置文件,基本上不用修改就可以使用,下面参数请根据自己的情况修改。
# vi /etc/mail/spamassassin/FuzzyOcr.cf
内容如下:
##开启日志,日志有4种级别(0-3),数值越大,日志越详细。
focr_logfile /var/log/FuzzyOcr.log
##扫描命令,根据自己的需要添加或减少
focr_bin_helper pnmnorm, pnminvert, pamthreshold, ppmtopgm, pamtopnm
#focr_bin_helper tesseract
##扫描最大运行时间,默认是10秒
#focr_timeout 15
##最小图像尺寸,小于这个参数的图片将被跳过,此参数不适用于PDF文件
#focr_min_height 4
#focr_min_width 4
##最大图像尺寸,大于这个参数的图片将被跳过,此参数不适用于PDF文件
#focr_max_height 800
#focr_max_width 800
##不同格式的最大图片大小,单位是"byte",大于这个参数的图片将不会扫描,默认值:无限制
#focr_max_size_gif 80000
#focr_max_size_jpeg 100000
#focr_max_size_png 80000
#focr_max_size_bmp 500000
#focr_max_size_tiff 500000
##跳过以下图像类型的检查,默认值:0 (检查图像类型)
#focr_skip_gif 1
#focr_skip_jpeg 1
#focr_skip_png 1
#focr_skip_bmp 1
#focr_skip_tiff 1
##定期情况临时目录
#focr_keep_bad_images 1
4、备注:配置FuzzyOcr数据库
如果你想采用数据库来存储邮件特征,FuzzyOcr有两种数据库存储方式,第一种是Hash,第二种是MySQL,这里我只结束MySQL存储方式。
建立数据库
# mysql -u root -p -e "create database FuzzyOcr"
# mysql -u root -p -e "grant all on FuzzyOcr.* to fuzzyocr@localhost identified by 'ruzzyocr'"
# mysql -u root -p FuzzyOccr < /usr/share/doc/spamassassin-FuzzyOcr-3.6.0/FuzzyOcr.mysql
配置FuzzyOcr
# vi /etc/mail/spamassassin/FuzzyOcr.cf
##设置MySQL数据库名、用户名、密码、SOKCET
focr_mysql_db FuzzyOcr
focr_mysql_hash Hash
focr_mysql_safe Safe
focr_mysql_user fuzzyocr
focr_mysql_pass fuzzyocr
focr_mysql_host localhost
#focr_mysql_port 3306
focr_mysql_socket /tmp/mysql.sock
##从下列选项采用不同的数据更新数据库表,默认是0
#focr_mysql_update_hash 1
三、测试:
# service amavisd reload
# spamassassin --lint
示例分析
一封邮件信头:
X-Spam-Level: ***********************************
X-Spam-Status: Yes, score=35.41 tagged_above=-10 required=5
tests=[DSPAM:Innocent=-1.000, ALL_TRUSTED=-1.44, DSPAM_HAM_99=-3.23,
FH_DATE_PAST_20XX=3.384, FUZZY_OCR=34.500, LONGWORDS=3.196]
autolearn=no
测试的环境为EMOS-1.5,没有导入DSPAM训练库;发送了一封带图片的垃圾邮件,在信头的绿色部分是DSPAM评分,红色为FUZZY_OCR的评分,可以看到邮件已经被识别为垃圾邮件;
备注:
如果FuyyzOcr不需要tesseract支持,可以不用安装
四、配置tesseract-ocr
Tesseract的OCR引擎最早由HP实验室于1985年开始研发,到1995年时已经成为OCR业内最准确的三款识别引擎之一。2005年,Tesseract由美国内华达州信息技术研究所获得,并请Google对Tesseract进行改进。目前,Tesseract被认为是最精确的开源 OCR 引擎之一,并支持多国语言。
1、安装依赖
# yum install libgif-devel libjpeg-devel libpng-devel libtiff-devel zlib-devel
# wget
https://leptonica.googlecode.com/files/leptonica-1.69.tar.gz# tar zxvf leptonica-1.69.tar.gz
# cd leptonica && ./configure
# make && make install
2、安装tesseract-ocr
# wget
https://tesseract-ocr.googlecode.com/files/tesseract-ocr-3.02.02.tar.gz# tar zxvf tesseract-ocr-3.02.02.tar.gz
# cd tesseract-ocr && ./configure
# make && make install
3、安装tesseract语言包,我这里添加了英文、中文的支持,如果需要其他语言支持,请下载其他的语言包
# wget
https://tesseract-ocr.googlecode.com/files/tesseract-ocr-3.02.eng.tar.gz# wget
https://tesseract-ocr.googlecode.com/files/tesseract-ocr-3.02.chi_sim.tar.gz# wget
https://tesseract-ocr.googlecode.com/files/tesseract-ocr-3.02.chi_tra.tar.gz解压这些语言包,然后复制到/usr/local/share/tessdata目录,然后测试是否生效
# tesseract --list-langs
List of available languages (3):
chi_sim
chi_tra
eng
4、测试图像识别
# tesseract -v
显示以下内容,说明安装正常。
tesseract 3.02.02
leptonica-1.69
libjpeg 6b : libpng 1.2.10 : libtiff 3.8.2 : zlib 1.2.3
使用tesseract-ocr测试识别,识别出来的文件在output文件里面
# tesseract phototest.tif output -l eng
5、配置FuzzyOcr支持tesseract
# vi /etc/mail/spamassassin/FuzzyOcr.cf
内容修改如下:
focr_bin_helper tesseract
6、测试:
# service amavisd reload
# spamassassin --lint