該項目誕生於一次爬蟲事件,當時一時興起想把某租房網信息爬下來,前面進行的仍是挺順暢的,可是在租房價格信息上被擺了一道,房屋的價格信息爲一個數字圖片爲底加上偏移量來顯示的,和雪碧圖同樣的實現方式,固然,其中加上了一點小算法,具體以下。javascript
獲取數字圖片信息和 offset
信息前端
{ "offset": [ [1, 4, 2, 8], [5, 1, 7, 8], [5, 1, 3, 8], ... ] }
由 offset 信息加上一點算法得出 position
信息java
(background-position: xxx px)
append
到價格信息他應該在地方略一思索,倒也不是什麼大事兒,只要加個識別的過程再輔以算法便可。node
在實行圖像識別的過程當中藉助到了 google
的開源軟件 tesseract-OCR
,由於爬蟲環境是 node
,遂寫了一個適用於 tesseract-OCR
最新版本的 node
插件,後續還添加了命令行使用的功能。git
若是以爲我對你有幫助,不妨給我個 star 吧,蟹蟹~github
想要使用圖像識別首先要確保電腦中已經安裝了 tesseract-OCR
點擊下載。npm
想要使用命令行建議全局安裝網絡
npm install node-tesr -g
tesr --from=./test/output.jpg --to=./output.txt
參數說明app
--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
插件
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 歡迎你們來找我玩兒。
歡迎小夥伴們直接加我,拉你進羣一塊兒學習前端呀,記得備註一下你來自哪裏哦。