本申請涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種條形碼的識別方法和裝置。
背景技術(shù):
隨著互聯(lián)網(wǎng)技術(shù)的快速發(fā)展,條形碼走進(jìn)了人們的生活,通過對條形碼的掃描與識別,可以完成支付、添加好友、獲取信息等各種業(yè)務(wù)。條形碼的識別速率已成為用戶業(yè)務(wù)體驗(yàn)的重要衡量標(biāo)準(zhǔn)。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本申請?zhí)峁┮环N條形碼的識別方法和裝置。
具體地,本申請是通過如下技術(shù)方案實(shí)現(xiàn)的:
一種條形碼的識別方法,所述方法包括:
根據(jù)預(yù)設(shè)的提取策略,在條形碼圖片中提取一行像素點(diǎn);
對該行像素點(diǎn)進(jìn)行解析,以得到對應(yīng)的第一字符串;
當(dāng)所述第一字符串滿足預(yù)設(shè)的字符規(guī)則時,將所述第一字符串確定為所述條形碼圖片中條形碼的識別結(jié)果。
一種條形碼的識別裝置,所述裝置包括:
像素點(diǎn)提取單元,根據(jù)預(yù)設(shè)的提取策略,在條形碼圖片中提取一行像素點(diǎn);
像素點(diǎn)解析單元,對該行像素點(diǎn)進(jìn)行解析,以得到對應(yīng)的第一字符串;
第一識別單元,當(dāng)所述第一字符串滿足預(yù)設(shè)的字符規(guī)則時,將所述第一字符串確定為所述條形碼圖片中條形碼的識別結(jié)果。
由以上描述可以看出,由于大部分條形碼攜帶的字符串都滿足預(yù)設(shè)的字符規(guī)則,因此本申請可以在條形碼圖片中一行像素點(diǎn)對應(yīng)的字符串滿足所述字符規(guī)則時,將該字符串確定為條形碼的識別結(jié)果,無需多次解析,大大提高了條形碼的識別速率。
附圖說明
圖1是本申請一示例性實(shí)施例示出的一種條形碼的識別方法的流程示意圖。
圖2是本申請一示例性實(shí)施例示出的另一種條形碼的識別方法的流程示意圖。
圖3是本申請一示例性實(shí)施例示出的一種用于條形碼的識別裝置的一結(jié)構(gòu)示意圖。
圖4是本申請一示例性實(shí)施例示出的一種條形碼的識別裝置的框圖。
具體實(shí)施方式
這里將詳細(xì)地對示例性實(shí)施例進(jìn)行說明,其示例表示在附圖中。下面的描述涉及附圖時,除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實(shí)施例中所描述的實(shí)施方式并不代表與本申請相一致的所有實(shí)施方式。相反,它們僅是與如所附權(quán)利要求書中所詳述的、本申請的一些方面相一致的裝置和方法的例子。
在本申請使用的術(shù)語是僅僅出于描述特定實(shí)施例的目的,而非旨在限制本申請。在本申請和所附權(quán)利要求書中所使用的單數(shù)形式的“一種”、“所述”和“該”也旨在包括多數(shù)形式,除非上下文清楚地表示其他含義。還應(yīng)當(dāng)理解,本文中使用的術(shù)語“和/或”是指并包含一個或多個相關(guān)聯(lián)的列出項(xiàng)目的任何或所有可能組合。
應(yīng)當(dāng)理解,盡管在本申請可能采用術(shù)語第一、第二、第三等來描述各種信息,但這些信息不應(yīng)限于這些術(shù)語。這些術(shù)語僅用來將同一類型的信息彼此區(qū)分開。例如,在不脫離本申請范圍的情況下,第一信息也可以被稱為第二信息,類似地,第二信息也可以被稱為第一信息。取決于語境,如在此所使用的詞語“如果”可以被解釋成為“在……時”或“當(dāng)……時”或“響應(yīng)于確定”。
圖1是本申請一示例性實(shí)施例示出的一種條形碼的識別方法的流程示意圖。
請參考圖1,所述條形碼的識別方法可以應(yīng)用在手機(jī)、平板電腦等終端設(shè)備中,包括有以下步驟:
步驟101,根據(jù)預(yù)設(shè)的提取策略,在條形碼圖片中提取一行像素點(diǎn)。
在本實(shí)施例中,終端設(shè)備在掃描條形碼后,可以獲得包括有條形碼的圖片,為便于后續(xù)識別,終端設(shè)備可以對所述包括有條形碼的圖片進(jìn)行壓縮、灰度化、二值化等處理,這部分的處理與實(shí)現(xiàn)可以參考相關(guān)技術(shù),本申請?jiān)诖瞬辉僖灰毁樖觥?/p>
在本實(shí)施例中,可以將經(jīng)過壓縮、灰度化、二值化等處理后的所述包括有條形碼的圖片稱為條形碼圖片。在本步驟中,可以根據(jù)預(yù)設(shè)的提取策略,在所述條形碼圖片中提取一行像素點(diǎn)。其中,所述預(yù)設(shè)的提取策略是以行為單位進(jìn)行像素點(diǎn)的提取,具體可以由開發(fā)人員進(jìn)行設(shè)置。
在一個例子中,可以從缺省的行開始,間隔固定的行數(shù)進(jìn)行像素點(diǎn)的提取,直至目標(biāo)提取行超出所述條形碼圖片。假設(shè),將所述缺省的行設(shè)置為所述條形碼圖片的第1行,所述固定的行數(shù)可以為10。依據(jù)這樣的提取策略,第一次提取所述條形碼圖片的第1行像素點(diǎn),第二次提取所述條形碼圖片的第11行像素點(diǎn),第三次提取所述條形碼圖片的第21行像素點(diǎn),第n次提取所述條形碼圖片的第1+(n-1)×10行像素點(diǎn),直至所述第1+(n-1)×10行像素點(diǎn)超出所述條形碼圖片,結(jié)束像素點(diǎn)的提取。當(dāng)然,所述缺省的行也可以是所述條形碼圖片的第2行,所述固定的行數(shù)也可以是15行等,本申請對此不做特殊限制。
在另一個例子中,還可以從缺省的行開始,間隔動態(tài)變化的行數(shù)進(jìn)行像素點(diǎn)的提取,直至目標(biāo)提取行超出所述條形碼圖片。假設(shè),將所述缺省的行設(shè)置為所述條形碼圖片的第1行,間隔的行數(shù)在10和20這兩個數(shù)值之間變化。依據(jù)這樣的提取策略,第一次提取所述條形碼圖片的第1行像素點(diǎn),第二次提取所述條形碼圖片的第11行像素點(diǎn),第三次提取所述條形碼圖片的第31行像素點(diǎn),第四次提取所述條形碼圖片的第41行像素點(diǎn),第五次提取所述條形碼圖片的第61行,依次類推,直至目標(biāo)提取行超出所述條形碼圖片,結(jié)束像素點(diǎn)的提取。
步驟102,對該行像素點(diǎn)進(jìn)行解析,以得到對應(yīng)的第一字符串。
基于前述步驟101,在提取到一行像素點(diǎn)后,可以對這行像素點(diǎn)進(jìn)行解析,以得到對應(yīng)的第一字符串。需要說明的是,依據(jù)條形碼的組成規(guī)則,所述條形碼中通常會包含校驗(yàn)碼,針對包含有校驗(yàn)碼的條形碼,所述解析得到第一字符串通常已通過校驗(yàn)碼的校驗(yàn)。當(dāng)然,還有一些條形碼中不包含校驗(yàn)碼,針對不包含校驗(yàn)碼的條形碼,所述第一字符串未進(jìn)行校驗(yàn)。這部分的處理與實(shí)現(xiàn)可以參照相關(guān)技術(shù),本申請?jiān)诖瞬辉僖灰毁樖觥?/p>
步驟103,當(dāng)所述第一字符串滿足預(yù)設(shè)的字符規(guī)則時,將所述第一字符串確定為所述條形碼圖片中條形碼的識別結(jié)果。
基于前述步驟102,在得到所述第一字符串之后,可以判斷所述第一字符串是否滿足預(yù)設(shè)的字符規(guī)則,如果所述第一字符串滿足所述字符規(guī)則,則可以確定所述第一字符串為所述條形碼圖片中條形碼的識別結(jié)果。
在本實(shí)施例中,所述字符規(guī)則可以由開發(fā)人員進(jìn)行設(shè)置,比如:不存在連續(xù)的預(yù)設(shè)字符,所述預(yù)設(shè)字符通常不包括:26個大小寫字母、0至9以及空格,即所述預(yù)設(shè)字符可以為除26個大寫字母、26個小寫字母、0至9以及空格之外的其他字符,比如:字符“&”、字符“%”、字符“#”等。具體地,在實(shí)際應(yīng)用中,條形碼中出現(xiàn)連續(xù)的所述預(yù)設(shè)字符的概率幾乎為0,因此在本步驟中,可以判斷所述第一字符串是否不存在連續(xù)的所述預(yù)設(shè)字符,如果所述第一字符串不存在連續(xù)的所述預(yù)設(shè)字符,則可以確定所述第一字符串為條形碼的識別結(jié)果。當(dāng)然,在實(shí)際的應(yīng)用中,根據(jù)條形碼的攜帶的字符串的特點(diǎn),開發(fā)人員還可以設(shè)置其他的字符規(guī)則,比如:國產(chǎn)商品的條形碼前三位通常為690-699,針對國產(chǎn)商品的條形碼,所述字符規(guī)則還可以包括前三位在690至699之間等。
由以上描述可以看出,由于大部分條形碼攜帶的字符串都滿足預(yù)設(shè)的字符規(guī)則,因此本申請可以在條形碼圖片中一行像素點(diǎn)對應(yīng)的字符串滿足所述字符規(guī)則時,將該字符串確定為條形碼的識別結(jié)果,無需多次解析,大大提高了條形碼的識別速率。
可選的,在本申請另一個例子中,基于圖1所示的實(shí)施例,為提高條形碼識別的準(zhǔn)確率,當(dāng)步驟102中解析得到的第一字符串不滿足預(yù)設(shè)的字符規(guī)則時,可以繼續(xù)判斷所述第一字符串與上一次根據(jù)所述提取策略在所述條形碼圖片中提取的除所述第一字符串對應(yīng)的行之外其他一行像素點(diǎn)對應(yīng)的第二字符串是否相同,并在所述第一字符串與所述第二字符串相同時,將所述第一字符串確定為條形碼的識別結(jié)果。
具體地,雖然將近100%的條形碼中攜帶的字符串均滿足所述預(yù)設(shè)的字符規(guī)則,但為了避免條形碼中攜帶不滿足所述字符規(guī)則的字符串,采用圖1所示的方式導(dǎo)致條形碼識別錯誤的問題,當(dāng)步驟102中解析得到的所述第一字符串不滿足預(yù)設(shè)的字符規(guī)則時,可以繼續(xù)判斷連續(xù)兩次提取的像素點(diǎn)的解析結(jié)果是否一致,如果一致,則可以將一致的解析結(jié)果確認(rèn)為條形碼的識別結(jié)果,以提高條形碼識別的準(zhǔn)確率。如果不一致,則可以基于預(yù)設(shè)的提取策略繼續(xù)提取像素點(diǎn),并判斷本次提取的像素點(diǎn)對應(yīng)的字符串是否滿足所述字符規(guī)則,直至某行像素點(diǎn)對應(yīng)的字符串滿足所述字符規(guī)則,或者連續(xù)兩次提取的像素點(diǎn)對應(yīng)的字符串一致。
由以上描述可以看出,本申請?jiān)诨谧址?guī)則無法識別出條形碼攜帶的字符串時,可以判斷連續(xù)兩次提取的像素點(diǎn)對應(yīng)的字符串是否相同,并將相同的字符串確定為條形碼的識別結(jié)果,進(jìn)而提高條形碼識別的準(zhǔn)確率。當(dāng)然,在實(shí)際應(yīng)用中,為進(jìn)一步提高條形碼識別的準(zhǔn)確率,在基于字符規(guī)則無法識別出條形碼攜帶的字符串時,還可以判斷連續(xù)三次或四次提取的像素點(diǎn)對應(yīng)的字符串是否相同,并將連續(xù)三次或四次相同的字符串作為條形碼的識別結(jié)果,本申請對此不作特殊限制。
可選的,在本申請另一個例子中,當(dāng)目標(biāo)提取行超出條形碼圖片時,如果基于前述字符規(guī)則和連續(xù)兩次字符串相同的方案仍未確定出條形碼的識別結(jié)果,則可以統(tǒng)計(jì)已解析得到的各個字符串的出現(xiàn)頻數(shù),并將出現(xiàn)頻數(shù)最大且大于1的字符串確定為條形碼圖片中條形碼的識別結(jié)果。舉例來說,假設(shè)已解析得到兩個字符串,分別為字符串a(chǎn)和字符串b,字符串a(chǎn)出現(xiàn)3次,字符串b出現(xiàn)1次,則可以將字符串a(chǎn)確定為條形碼的識別結(jié)果。本申請可以根據(jù)解析出的字符串的出現(xiàn)頻數(shù)對前述方式無法識別的條形碼圖片進(jìn)行補(bǔ)充識別,提高了條形碼識別的準(zhǔn)確率??梢岳斫獾氖?,在實(shí)際實(shí)現(xiàn)中,還可以將確定條形碼識別結(jié)果的出現(xiàn)頻數(shù)設(shè)置為大于2或者大于3等,以進(jìn)一步提高條形碼識別的準(zhǔn)確率,比如:針對不包含校驗(yàn)碼的條形碼,可以設(shè)置較大的出現(xiàn)頻數(shù)。在本實(shí)施例中,如果已解析得到的各字符串的出現(xiàn)頻數(shù)均為1,則可以確定條形碼識別失敗。另一方面,當(dāng)目標(biāo)提取行超出所述條形碼圖片時,如果仍未解析得到任何字符串,也可以確定條形碼識別失敗。
在本申請中,基于字符規(guī)則對條形碼進(jìn)行識別的速率最快,且能夠識別出絕大多數(shù)的條形碼,因此,本申請可先基于字符規(guī)則對條形碼進(jìn)行識別。而采用連續(xù)兩次提取的像素點(diǎn)對應(yīng)的字符串相同方式進(jìn)行識別的速率其次,因此,本申請可以將其作為字符規(guī)則識別方式的補(bǔ)充識別方式。而采用出現(xiàn)頻數(shù)進(jìn)行識別的速率最慢,故本申請將其作為前兩種識別方式的補(bǔ)充識別方式。由此可以看出,本申請可以采用三種識別方式對條形碼進(jìn)行識別,在兼顧識別速率的同時還可提高條形碼識別的準(zhǔn)確率。
圖2是本申請一示例性實(shí)施例示出的另一種條形碼的識別方法的流程示意圖。
請參考圖2,本例中條形碼的識別方法可以包括以下步驟:
步驟201,根據(jù)預(yù)設(shè)的提取策略,在條形碼圖片中提取缺省行像素點(diǎn)。
在本實(shí)施例中,假設(shè)經(jīng)終端設(shè)備進(jìn)行壓縮、灰度化、二值化等處理之后得到的條形碼圖片一共有40行像素點(diǎn),缺省的行為第1行,預(yù)設(shè)的提取策略為間隔10行進(jìn)行像素點(diǎn)的提取。在本步驟中,首次提取所述條形碼圖片的第1行像素點(diǎn)。
步驟202,對該行像素點(diǎn)進(jìn)行解析,以得到對應(yīng)的字符串a(chǎn)。
在本步驟中,解析所述條形碼圖片的第1行像素點(diǎn),得到對應(yīng)的字符串a(chǎn)。
步驟203,判斷所述字符串a(chǎn)是否滿足預(yù)設(shè)的字符規(guī)則。如果所述字符串a(chǎn)不滿足所述字符規(guī)則,則可以執(zhí)行步驟204。如果所述字符串a(chǎn)滿足所述字符規(guī)則,則可以執(zhí)行步驟208。
步驟204,根據(jù)所述提取策略,在條形碼圖片中再提取一行像素點(diǎn)。
基于前述步驟203的判斷結(jié)果,當(dāng)所述條形碼圖片的第1行像素點(diǎn)對應(yīng)的字符串a(chǎn)不滿足所述字符規(guī)則時,根據(jù)所述提取策略,可以提取所述條形碼圖片的第11行像素點(diǎn)。
步驟205,對該行像素點(diǎn)進(jìn)行解析,以得到對應(yīng)的字符串b。
基于前述步驟204,可以對所述第11行像素點(diǎn)進(jìn)行解析,以得到對應(yīng)的字符串b。
步驟206,判斷所述字符串b是否滿足所述字符規(guī)則。如果所述字符串b滿足所述字符規(guī)則,則可以執(zhí)行步驟208。如果所述字符串b不滿足所述字符規(guī)則,則可以執(zhí)行步驟207。
步驟207,判斷所述字符串b和上一次提取的像素點(diǎn)對應(yīng)的字符串(所述字符串a(chǎn))是否相同。如果相同,則可以執(zhí)行步驟208。如果不相同,則可以繼續(xù)執(zhí)行步驟204。
基于前述步驟206的判斷結(jié)果,當(dāng)所述條形碼圖片的第11行像素點(diǎn)對應(yīng)的字符串b也不滿足所述字符規(guī)則時,可以判斷所述字符串b與所述字符串a(chǎn)是否相同,如果相同,則可以執(zhí)行步驟208。
步驟208,確定條形碼的識別結(jié)果。
基于前述步驟203的判斷結(jié)果,當(dāng)所述條形碼圖片的第1行像素點(diǎn)對應(yīng)的字符串a(chǎn)滿足所述字符規(guī)則時,可以將所述字符串a(chǎn)確定為條形碼的識別結(jié)果。
基于前述步驟206的判斷結(jié)果,當(dāng)所述條形碼圖片的第11行像素點(diǎn)對應(yīng)的字符串b滿足所述字符規(guī)則時,可以將所述字符串b確定為條形碼的識別結(jié)果。
基于前述步驟207的判斷結(jié)果,當(dāng)所述字符串b與所述字符串a(chǎn)相同時,可以將所述字符串b確定為條形碼的識別結(jié)果。
在本實(shí)施例中,如果步驟207中確定所述字符串b與所述字符串a(chǎn)不相同,則可以再次執(zhí)行步驟204,提取所述條形碼圖片的第21行像素點(diǎn),并繼續(xù)執(zhí)行步驟203解析所述第21行像素點(diǎn),以得到對應(yīng)的字符串c。判斷所述字符串c是否滿足所述字符規(guī)則,如果滿足,則可以將所述字符串c確定為條形碼的識別結(jié)果。如果所述字符串c不滿足所述字符規(guī)則,則判斷所述字符串c與所述字符串b是否相同,如果相同,則也可以將所述字符串c確定為條形碼的識別結(jié)果。如果不相同,則可以繼續(xù)提取所述條形碼圖片的第31行,并通過解析得到第31行像素點(diǎn)對應(yīng)的字符串d,如果字符串d不滿足所述字符規(guī)則,且字符串d與字符串c也不相同,而第41行像素點(diǎn)又已經(jīng)超出了條形碼圖片,則可以統(tǒng)計(jì)各個字符串的出現(xiàn)頻數(shù),并將出現(xiàn)頻數(shù)最高且大于1的字符串確定為條形碼的識別結(jié)果。如果各字符串的出現(xiàn)頻數(shù)均為1,則可以確定條形碼識別失敗。
與前述條形碼的識別方法的實(shí)施例相對應(yīng),本申請還提供了條形碼的識別裝置的實(shí)施例。
本申請條形碼的識別裝置的實(shí)施例可以應(yīng)用在終端設(shè)備上。裝置實(shí)施例可以通過軟件實(shí)現(xiàn),也可以通過硬件或者軟硬件結(jié)合的方式實(shí)現(xiàn)。以軟件實(shí)現(xiàn)為例,作為一個邏輯意義上的裝置,是通過其所在終端設(shè)備的處理器將非易失性存儲器中對應(yīng)的計(jì)算機(jī)程序指令讀取到內(nèi)存中運(yùn)行形成的。從硬件層面而言,如圖3所示,為本申請條形碼的識別裝置所在終端設(shè)備的一種硬件結(jié)構(gòu)圖,除了圖3所示的處理器、內(nèi)存、網(wǎng)絡(luò)接口、以及非易失性存儲器之外,實(shí)施例中裝置所在的終端設(shè)備通常根據(jù)該終端設(shè)備的實(shí)際功能,還可以包括其他硬件,對此不再贅述。
圖4是本申請一示例性實(shí)施例示出的一種條形碼的識別裝置的框圖。
請參考圖4,所述條形碼的識別裝置300可以應(yīng)用在前述圖3所示的終端設(shè)備中,包括有:像素點(diǎn)提取單元301、像素點(diǎn)解析單元302、第一識別單元303、相同判斷單元304、第二識別單元305、頻數(shù)統(tǒng)計(jì)單元306、第三識別單元307、第四識別單元308以及第五識別單元309。
其中,像素點(diǎn)提取單元301,根據(jù)預(yù)設(shè)的提取策略,在條形碼圖片中提取一行像素點(diǎn);
像素點(diǎn)解析單元302,對該行像素點(diǎn)進(jìn)行解析,以得到對應(yīng)的第一字符串;
第一識別單元303,當(dāng)所述第一字符串滿足預(yù)設(shè)的字符規(guī)則時,將所述第一字符串確定為所述條形碼圖片中條形碼的識別結(jié)果。
相同判斷單元304,當(dāng)所述第一字符串不滿足所述字符規(guī)則時,判斷所述第一字符串與上一次根據(jù)所述提取策略在所述條形碼圖片中提取的除所述第一字符串對應(yīng)的行之外其他一行像素點(diǎn)對應(yīng)的第二字符串是否相同;
第二識別單元305,當(dāng)所述第一字符串與所述第二字符串相同時,將所述第一字符串確定為所述條形碼圖片中條形碼的識別結(jié)果,當(dāng)所述第一字符串與所述第二字符串不相同時,返回根像素點(diǎn)提取單元。
可選的,所述提取策略為從缺省的行開始,間隔固定的行數(shù)進(jìn)行像素點(diǎn)的提取,直至目標(biāo)提取行超出所述條形碼圖片。
可選的,所述提取策略為從缺省的行開始,間隔動態(tài)變化的行數(shù)進(jìn)行像素點(diǎn)的提取,直至目標(biāo)提取行超出所述條形碼圖片。
頻數(shù)統(tǒng)計(jì)單元306,當(dāng)目標(biāo)提取行超出所述條形碼圖片時,統(tǒng)計(jì)已解析得到的各字符串的出現(xiàn)頻數(shù);
第三識別單元307,將出現(xiàn)頻數(shù)最大,且大于1的字符串確定為所述條形碼圖片中條形碼的識別結(jié)果。
第四識別單元308,當(dāng)已解析得到的各字符串的出現(xiàn)頻數(shù)均為1時,確定條形碼識別失敗。
第五識別單元309,當(dāng)目標(biāo)提取行超出所述條形碼圖片時,如果未解析得到任何字符串,則確定條形碼識別失敗。
可選的,所述字符規(guī)則為不存在連續(xù)的預(yù)設(shè)字符,所述預(yù)設(shè)字符不包括:26個大小寫字母、0至9以及空格。
上述裝置中各個單元的功能和作用的實(shí)現(xiàn)過程具體詳見上述方法中對應(yīng)步驟的實(shí)現(xiàn)過程,在此不再贅述。
對于裝置實(shí)施例而言,由于其基本對應(yīng)于方法實(shí)施例,所以相關(guān)之處參見方法實(shí)施例的部分說明即可。以上所描述的裝置實(shí)施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上。可以根據(jù)實(shí)際的需要選擇其中的部分或者全部模塊來實(shí)現(xiàn)本申請方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實(shí)施。
以上所述僅為本申請的較佳實(shí)施例而已,并不用以限制本申請,凡在本申請的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請保護(hù)的范圍之內(nèi)。