Python+OpenCV提取公眾號文章閱讀數(shù)
周末大清早群友問我能否做個小功能——提取出公眾號文章閱讀數(shù)。呵呵,谷歌網站主頁光溜溜的,做起來也是個小功能吧。至于什么系統(tǒng)集成我也不多問了,別家公司的秘密不亂打聽,殺頭的。
初定采用圖像識別的方法,圖像文字提取有很多現(xiàn)成方案,而且還是顯示器上的文字提取,比車牌識別要簡單得多,就算不答應他,我也想自己試試玩玩。
計劃幾天的工作量,沒打算在它身上廢太多功夫。一切的創(chuàng)新從拷貝開始,沒想到3小時就把功能實現(xiàn),接下來抽空上一點細節(jié),以及各種異常處理,畢竟要規(guī)避少量誤報的情況。
方案采用Python+OpenCV+OCR庫(Optical Character Recognition,光學字符識別),文稿下方視頻演示執(zhí)行效果。
友情提示,點擊視頻右側按鈕可以旋轉手機觀看,否則文字太小豎屏看不清
所用的OCR是離線數(shù)據(jù)包,網上看到有人用百度AI的OCR服務,反正我不會考慮把核心功能放在大佬的服務器上跑的。
主席:飯碗任何時候都要牢牢端在自己手中。
簡要說說
PC端打開公眾號文章也是沒有閱讀數(shù)的,爬蟲也做不了。
我認為是公眾號防止第三方抓取數(shù)據(jù),特意把“閱讀”字體顏色改得和背景色相近,在識別圖像時“閱讀”辨識成背景噪聲。
下面列出原始圖像的文字識別效果,不是太好。當然,沒有那種圖像處理能少得了預處理的。
';', 'RRB', '“有一種贊賞叫催更,感謝你的肯定“', 'eo', 'ti', '|', '&', '>', 'ob', '8', '分享', 'ke', '2', '1', '人呵”瀘州考究官方旗艦店', '關注公眾號', '愛喝好酒的,進來看看', '發(fā)消息']
我用畫圖把原始的灰色字體描繪成黑色,算是人工干預預處理。再次識別,“閱讀”數(shù)據(jù)成功提取出來。
下面是涂黑字體識別結果。
'“有一種贊賞叫催更,感謝你的肯', 'eo', 'ti', '|', '閱讀', '31', 'P', 'oO', 'o', '8B', '分享', '收藏', '2', '1', '人呵”瀘州考究官方旗艦店', '關注公眾號', '愛喝好酒的,進來看看']
既然高對比度它有利于提高文字識別率,我就想辦法提高“閱讀”文字的對比度。首先用的是邊沿檢測方法,所有文字邊沿都描繪一個框。
本以為轉換成邊沿檢測識別效果會好起來,實際反而更差。猜測OCR庫不能識別“浮雕狀文字”,文字的邊框使得文字看起來更肥大,邊沿檢測后文字和背景色之間有個輪廓,只有特別粗的字體在邊沿檢測后不受影響。
瞧,小字體文字都識別成亂碼。
'”有一種贊賞叫催政,感謝你的肯定”', '稀罕作者', 'ia', 'io', 'ne', 'ae', 'me', ';', '1', 'See', 'ga', 'lel', 'Te', 'Be', 'mg', 'cD']
剔除背景色
微信文章默認背景色都是白色,計劃把白色涂抹成其他顏色,其他非白色位置描黑。其實白色的判定不是絕對的白色,而是取出一定范圍的相對白色。下圖左側是取出的“蒙版”,除了要去除的背景色外,蒙版上其余顏色涂成黑色。蒙版的作用和Photoshop是一樣的。
如此一來整張圖片文字對比對就高多。
最終文字檢測結果。
'調用do_exit,文稿末尾我上貼圖;', '了', '2、如果某應用程序在內核空間死鎖,將永遠', '不能控制GPIO', ',只能手動強制關機;', '吳解君', '“有一種贊賞叫催更,感謝你的上衣', '”', '中', '稀罕作者', '閱讀', '31', 'PrP', '@', 'o', '8', '分享', '收藏', '2', '1', 'GE', '瀘州老竄官方旗艦店', '、', 'g', 'BIRTH,', 'WEEE.', '關注公眾號', '發(fā)消息']
最后
天下老板都一樣,貌似對方老板為了接單同意客戶各種指標要求,先把客戶套住再說,至于實現(xiàn)嘛,交給寫代碼的,碼農Ctrl+C、Ctrl+V想盡辦法去圓老板的當年吹下的牛逼。他手下碼農頭快突了,搞不定原型機,項目負責人到處找外協(xié)幫忙。
你們可知道外協(xié)其實也是到處Ctrl+C、Ctrl+V的嗎?哈哈。
問對方和客戶談指標時下面做事的人有代表參加評審做可行性分析嗎?
項目負責人如此回我。
“評審會,評什么?打工人,憑什么?”
鄙人臥槽評天下,閣下是個文化人。
真要說打工人憑什么,也不是真沒有:君子生非異也,善假于物也。
老板借員工的時間,員工借老板的資源。