該項目誕生於一次爬蟲事件,當時一時興起想把某租房網信息爬下來,前面進行的仍是挺順暢的,可是在租房價格信息上被擺了一道,房屋的價格信息爲一個數字圖片爲底加上偏移量來顯示的,和雪碧圖同樣的實現方式,固然,其中加上了一點小算法,具體以下。javascript
offset
信息
{ "offset": [ [1, 4, 2, 8], [5, 1, 7, 8], [5, 1, 3, 8], ... ] }
position
信息
(background-position: xxx px)
append
到價格信息他應該在地方略一思索,倒也不是什麼大事兒,只要加個識別的過程再輔以算法便可。前端
在實行圖像識別的過程當中藉助到了 google
的開源軟件 tesseract-OCR
,由於爬蟲環境是 node
,遂寫了一個適用於 tesseract-OCR
最新版本的 node
插件,後續還添加了命令行使用的功能。java
若是以爲我對你有幫助,不妨給我個 star 吧,蟹蟹~node
想要使用圖像識別首先要確保電腦中已經安裝了 tesseract-OCR
點擊下載。github
想要使用命令行建議全局安裝算法
npm install node-tesr -g
複製代碼
tesr --from=./test/output.jpg --to=./output.txt
複製代碼
參數說明npm
--from 須要識別的圖片路徑(必須)
--to 若傳入此參數會將識別的文字輸出到該文件下(非必須,默認會將識別內容輸出到命令行)
--l 識別語言,對中文稍微作了點處理,識別簡體 --l=chs,識別繁體 --l=cht(非必須,默認爲 eng)
--p 見 lib/config.js 裏的說明(非必須,默認爲 3 自動模式)
--o 見 lib/config.js 裏的說明(非必須,默認爲 3 自動模式)
複製代碼
npm install node-tesr
複製代碼
const tesseract = require('node-tesr')
tesseract('./output.jpg', { l: 'eng', oem: 3, psm: 3 }, function(err, data) {
// 此處得到識別內容
console.log(data)
})
// 或者以下也可
tesseract('./output.jpg', function(err, data) {
// 此處得到識別內容
console.log(data)
})
複製代碼
經測試效果仍是不錯的,可是有一點須要注意一下,上面提到該網站的數字圖片是透明底的,測試發現 tesseract-OCR
對透明底的彷佛無解,這個時候就須要結合一下 images
這個 node
插件bash
let images = require('images')
images(500, 100)
.fill(0xff, 0xff, 0xff, 1)
.draw(images('demo.png'), 10, 10)
.save('output.jpg', {
quality: 100
})
複製代碼
將透明底填充爲白底便可正常識別網絡
老闆!個人圖像識別率很低怎麼破!
來,看這裏,這個能夠提升圖像識別率。
then
來處理回調代碼即人生,我甘之如飴。
我在這裏 gayhub@jsjzh 歡迎你們來找我玩兒。
歡迎小夥伴們直接加我,拉你進羣一塊兒學習前端呀,記得備註一下你來自哪裏哦。