曹重陽
一、需求分析
對天貓平臺的企業(yè)信息采集下來進行結構化處理,提取出文字信息后匯總進Excel作為交付文件。
主要的功能設計如下:
1、程序能夠自動讀取企業(yè)工商信息圖片所在的文件夾路徑,并從文件夾路徑中順序取出圖片進行識別,最終的識別結果以一份匯總的Excel交付。
2、因為天貓平臺公示的圖片內容沒有固定格式,所以需要程序能匹配不同格式的圖片內容提取信息。
3、能夠提取出圖片中的企業(yè)注冊號、企業(yè)名稱數(shù)據(jù)項,企業(yè)注冊號、企業(yè)名稱數(shù)據(jù)項要進行分析處理。
4、識別準確率需要保證在95%以上。
5、識別速度保持在60秒識別50張圖片。
二、本程序處理圖片方面的關鍵模塊
1、對圖片進行切割:
要求識別的文字信息“企業(yè)名稱”“企業(yè)注冊號”位于整個圖片的其中一部分,把剩余部分切除,只留下關鍵信息部分,不但可以提高識別速度,還可提升識別率。
2、在進行圖片的二值化時,有兩種方式:
(1)圖片為彩色時,宜找到每個像素點合適的灰色度,因為每個像素點的灰色度不同程度上受到周邊像素加權影響,從而影響整個圖片的識別率。比如本像素點加上周圍8個灰度值再除以9,算出其相對灰度值。
(2)圖片為黑白色時,宜采用max-min方法對圖片進行二值化。
針對本程序識別的圖片的黑白色對比明顯,故采用max-min方法進行二值化。
private static File binaryImage(File orcFile) throws IOException {
// 獲取圖片的BufferedImage對象
BufferedImage bi = ImageIO.read(orcFile);
int h = bi.getHeight();// 獲取圖片的高
int w = bi.getWidth();// 獲取圖片的寬
BufferedImage nbi = new BufferedImage(w, h, BufferedImage.TYPE_BYTE_BINARY);
// 設置合適的經驗閾值,對二值化的識別效果起重要作用
int threshold = new Color(20, 20, 20).getRGB();// 閾值對應的顏色位于黑色文字和偏黑色背景顏色區(qū)間即可
for (int x = 0; x < w; x++) {
for (int y = 0; y < h; y++) {
// 二值化處理
if (bi.getRGB(x, y) > threshold) {
int max = new Color(255, 255, 255).getRGB();
nbi.setRGB(x, y, max);
} else {
int min = new Color(0, 0, 0).getRGB();
nbi.setRGB(x, y, min);
}
}
}
// 將二值化處理后的圖片放于D:\\orc_cut_binary下
String orcFileName = orcFile.getName();
String binaryDir = "D:\\orc_cut_binary";
File dir = new File(binaryDir);
// 存儲目錄不存在,則創(chuàng)建目錄
if (!dir.exists()) {
dir.mkdirs();
}
File binaryFile = new File(binaryDir + "/" + orcFileName.substring(0, orcFileName.indexOf(".")) + "binary.png");
ImageIO.write(nbi, "png", binaryFile);
return binaryFile;
}
3、在選取二值化中的經驗閾值,我們有以下思路:
(1)二值化微分計算閾值
(2)二值化類卷積的對梯度變化加強得到閾值
對24位位圖進行中值濾波會改變RGB各分量的值,所以圖片的顏色會發(fā)生變化,但對于8位的位圖,由于都是灰度的顏色,所以變化并不明顯,而且濾波的窗口選的越大,對應的濾波效果的模糊度也會上升。
4、增加圖片的亮度:
增加圖片亮度可以使有些彩色圖片的識別率大大增加,本程序別的圖片為黑白照片,增加圖片亮度提升的識別率并不樂觀。
5、對圖片的邊緣進行尖銳化處理:
銳化可以快速調整圖像邊緣細節(jié)的對比度,并在邊緣的兩側生成一條亮線一條暗線,使畫面整體更加清晰。對于高分辨率的輸出,通常銳化效果在屏幕上顯示比印刷出來的更明顯。在圖片的Alpha值保持不變的情況下,本程序前期也進行了銳化處理,但效果并不明顯,有時識別率甚至可能低于未銳化處理的圖片。
6、對圖片進行平滑縮放:
有時很多圖片本身無法很好的被識別,但當放大適當倍數(shù)時,就可增強識別率,但這個“適當倍數(shù)”很難把控,它受諸多硬件因素影響,比如電腦配置、針式打印機打印連貫性差等問題。