• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于微信小程序的可手寫算式計(jì)算器設(shè)計(jì)

      2020-07-25 04:41:02宋汝良施運(yùn)淵
      江蘇科技信息 2020年16期
      關(guān)鍵詞:字符識別計(jì)算器手寫

      宋汝良,施運(yùn)淵

      (上海夢創(chuàng)雙楊數(shù)據(jù)科技股份有限公司,上海 200333)

      0 引言

      隨著人們越來越追求生活的便利,普通計(jì)算器已無法滿足人們的需求。手寫計(jì)算器允許用戶像在紙上一樣在自己的移動電話或平板電腦上寫不同的公式,并獲得計(jì)算結(jié)果。由于手寫計(jì)算器學(xué)習(xí)成本低,操作簡單,它為人們的學(xué)習(xí)、工作和生活帶來了極大的便利。

      1 項(xiàng)目背景

      可手寫算式計(jì)算器首先要求能對手寫的文字、數(shù)字及符號進(jìn)行識別。光學(xué)字符識別技術(shù)為這一需求提供了條件。光學(xué)字符識別(Optical Character Recognition,OCR)是指通過電子設(shè)備(例如掃描儀或數(shù)碼相機(jī))檢查打印在紙上的字符,通過檢測深色和明亮圖案確定形狀,然后將形狀轉(zhuǎn)換為使用字符識別方法的計(jì)算機(jī)文本[1]。手寫字符識別一直是模式識別領(lǐng)域研究的前沿領(lǐng)域,在圖像處理中對手寫文檔的OCR有很大的需求。研究人員已經(jīng)提出了許多用于字符識別的方法,歷史上字符識別系統(tǒng)已經(jīng)發(fā)展了大致3個時(shí)代[8]。最早的字符識別器出現(xiàn)在20世紀(jì)40年代中期,直到1980年的研究都受到強(qiáng)大的計(jì)算機(jī)硬件和數(shù)據(jù)采集的推動。然而,字符識別研究主要集中在不使用任何語義信息的形狀識別技術(shù)上。1990年后,字符識別系統(tǒng)的真正進(jìn)步是在不斷增長的信息技術(shù)的支持下使用新的方法和開發(fā)工具實(shí)現(xiàn)的。20世紀(jì)90年代初期,圖像處理和模式識別技術(shù)與人工智能方法有效結(jié)合。如今,除了功能更強(qiáng)大的計(jì)算機(jī)和諸如照相機(jī)、掃描儀和電子平板電腦之類的精確電子設(shè)備外,研究人員還有效利用了諸如隱馬爾可夫模型、神經(jīng)網(wǎng)絡(luò)等方法。市面上也出現(xiàn)了各種開源OCR庫,其中的Tesseract非常強(qiáng)大,它可以支持包括中文在內(nèi)的60多種語言的識別,并且可以由用戶自定義字體。我們將手寫字體作為一種自定義字體,便可以利用Tesseract庫對手寫文本進(jìn)行識別。

      在對圖像中的文本進(jìn)行識別前,使用閾值分割[2]等方法對圖像進(jìn)行處理時(shí)常用的手段。閾值化是最簡單的圖像分割方法,閾值可用于從灰度圖像中創(chuàng)建二進(jìn)制圖像。二值圖像還可通過分割方法由彩色圖像生成。分割是將源圖像中的每個像素分配給兩個或更多類的過程。閾值分割技術(shù)中,常用的閾值選取方法包括灰度直方圖峰谷法[3]、最小誤差法[4]、Otsu法[5]、最大熵自動閾值法[6-7]等。其中Otsu法被認(rèn)為是閾值選取的最優(yōu)方法之一。

      網(wǎng)絡(luò)時(shí)代的來臨為人們的生活帶來了極大便利,手機(jī)等移動端產(chǎn)品越來越普及。微信作為智能終端下跨平臺的即時(shí)通信工具,具有十分龐大的用戶群體[9]。為了進(jìn)一步方便用戶體驗(yàn)手寫計(jì)算器的便利,我們以微信小程序的形式呈現(xiàn)最終的程序。微信小程序是一種無須下載即可使用的應(yīng)用程序,它基于微信這一廣泛使用的應(yīng)用程序,以類似于網(wǎng)頁應(yīng)用的形式呈現(xiàn)給用戶。用戶可以通過掃描二維碼或在微信中進(jìn)行搜索來打開應(yīng)用程序。

      2 項(xiàng)目介紹

      本項(xiàng)目是一個微信小程序,可用于識別和計(jì)算手寫數(shù)學(xué)公式。進(jìn)入小程序后,有兩個界面:識別界面和個人信息界面。在識別界面中,用戶可以選擇直接手寫數(shù)學(xué)公式進(jìn)行計(jì)算,也可以上傳照片進(jìn)行識別。編寫公式時(shí),如果輸入有誤,則可以使用“橡皮擦”功能擦除書寫的部分或選擇清空畫布。上載照片將要求用戶使用相機(jī)授予小程序并獲得相冊。用戶選擇照片后,單擊“上載”按鈕將照片上載到服務(wù)器。我們將使用Python腳本和Tesseract來處理,識別和計(jì)算用戶上傳的圖像。識別結(jié)果和計(jì)算結(jié)果將返回給用戶。用戶可以選擇收集此計(jì)算。在個人信息界面中,用戶可以查看個人收藏夾和歷史記錄并管理收藏夾。項(xiàng)目具有如下具體功能:

      (1)識別手寫算式。微信小程序提供了一個畫布控件,可用于獲取用戶手指在控件范圍內(nèi)的移動。我們?yōu)楫嫴荚O(shè)置淺色背景,并用黑色標(biāo)記書寫軌跡,可以有效增強(qiáng)前景背景的對比度,從而提高識別精度。

      (2)識別圖片中的算式。對于用戶上傳的圖像,我們使用閾值分割等方法對圖像進(jìn)行處理,并將其轉(zhuǎn)換為清晰的二進(jìn)制圖像以進(jìn)行識別。

      (3)計(jì)算結(jié)果。識別結(jié)果將首先轉(zhuǎn)換為特定的格式字符串,以表示數(shù)學(xué)公式及其空間結(jié)構(gòu)。然后使用python腳本來處理和計(jì)算字符串以獲得最終結(jié)果。

      (4)收藏與歷史。用戶可以選擇在返回結(jié)果后收藏或取消收藏,或者在個人信息界面中查看歷史記錄和管理收藏。

      3 技術(shù)細(xì)節(jié)

      3.1 微信小程序的設(shè)計(jì)與實(shí)現(xiàn)

      微信小程序基于MCCM框架的思想,網(wǎng)頁與數(shù)據(jù)緊密結(jié)合。數(shù)據(jù)上的每次更改都會更改或重新呈現(xiàn)網(wǎng)頁。在微信小程序中,這種操作是通過功能“setData”來實(shí)現(xiàn)的,在該功能中傳遞了重新渲染功能。

      圖1 可手寫算式計(jì)算器微信小程序首頁

      本文所提出的可手寫算式計(jì)算器的微信小程序首頁設(shè)計(jì)如圖1所示。首頁分為3個主要模塊,分別為圖片識別(淺色區(qū)域)、手寫識別(深色區(qū)域)和下方的任務(wù)欄。用戶可以選擇使用圖片識別功能,來識別圖片中的算式并獲取計(jì)算結(jié)果。當(dāng)選擇手寫識別功能時(shí),用戶可以在屏幕上手寫算式并識別、計(jì)算。圖片識別和手寫識別模塊如圖2所示。

      圖2 圖片識別(左)和手寫識別(右)

      我們也提供了收藏和查看計(jì)算歷史的功能,幫助用戶快速找到之前計(jì)算過的結(jié)果。收藏和歷史功能的界面如圖3所示。

      圖3 收藏功能(左)和歷史功能(右)

      3.2 后端模型

      本項(xiàng)目后端使用Django框架。我們共設(shè)計(jì)了兩個Django模型,分別為WeUser模型和RecognizeItem。WeUser用來保存用戶信息以及和數(shù)據(jù)庫交互。RecognizeItem模型用來保存每次的識別記錄。本項(xiàng)目共包含9個視圖,分別對應(yīng)圖片上傳、識別、計(jì)算、收藏、取消收藏,以及識別記錄、用戶信息、識別歷史、收藏的查詢等。

      3.3 Tesseract庫的應(yīng)用

      3.3.1 Tesseract模型訓(xùn)練

      我們選擇數(shù)學(xué)字符集來訓(xùn)練模型,并生成了訓(xùn)練數(shù)據(jù)的標(biāo)準(zhǔn)模式。一個標(biāo)準(zhǔn)的訓(xùn)練數(shù)據(jù)集合示例如圖4所示。

      圖4 Tesseract模型訓(xùn)練數(shù)據(jù)示例

      我們將數(shù)學(xué)符號作為一種新的字體。這種新的字體被用于訓(xùn)練并被保存,之后我們使用了輔助工具(jTessBoxEditor.jar等)對訓(xùn)練結(jié)果進(jìn)行更正,以獲得更精準(zhǔn)的結(jié)果。

      3.3.2 識別

      所有被捕獲或者上傳的圖片將首先經(jīng)過Python腳本的二值化處理,以獲取更清晰的算式圖像[10]。之后對于二值圖像,程序?qū)⒏鶕?jù)其空間結(jié)構(gòu)對其進(jìn)行分塊,并分別對每一塊進(jìn)行識別。通過分塊,程序?qū)⒖梢杂行ёR別分?jǐn)?shù)、根式、指數(shù)、對數(shù)、三角函數(shù)等復(fù)雜算式。分塊的主要思想是在像素基本檢測包含手寫文本的區(qū)域是否存在空白行或者空白列,這些空白的行和列將作為分塊的分割線。根據(jù)分塊所在空間位置,程序?qū)Y(jié)果進(jìn)行組合,并得到最終結(jié)果。

      4 結(jié)語

      本項(xiàng)目是一個可識別并計(jì)算手寫算式的微信小程序,使用Django作為服務(wù)后端,使用Python結(jié)合開源項(xiàng)目Tesseract的方式進(jìn)行手寫算式的識別。具有輕量級、界面清爽、功能全面、使用簡單的優(yōu)點(diǎn)。本項(xiàng)目也在持續(xù)更新中,后續(xù)本項(xiàng)目將支持更多算式的計(jì)算,并努力提升識別的精確度,為用戶帶來更好的體驗(yàn)。

      猜你喜歡
      字符識別計(jì)算器手寫
      手寫比敲鍵盤更有助于學(xué)習(xí)和記憶
      我手寫我心
      抓住身邊事吾手寫吾心
      [計(jì)算器不是萬能的]
      基于集成學(xué)習(xí)的MINIST手寫數(shù)字識別
      電子制作(2018年18期)2018-11-14 01:48:08
      一種改進(jìn)深度學(xué)習(xí)網(wǎng)絡(luò)結(jié)構(gòu)的英文字符識別
      儀表字符識別中的圖像處理算法研究
      基于CUDA和深度置信網(wǎng)絡(luò)的手寫字符識別
      一個損壞的計(jì)算器
      讀寫算(中)(2015年10期)2015-11-07 07:24:10
      一個損壞的計(jì)算器
      常宁市| 连山| 哈密市| 上杭县| 澄城县| 南宁市| 怀宁县| 永安市| 易门县| 宁武县| 会理县| 淮滨县| 遂川县| 嘉兴市| 天峻县| 奇台县| 淮南市| 恭城| 织金县| 长阳| 绩溪县| 九江县| 陆丰市| 巴东县| 肇东市| 无为县| 宁武县| 乌什县| 腾冲县| 永寿县| 平阳县| 元氏县| 玉树县| 柳州市| 红桥区| 那曲县| 连山| 江油市| 都安| 宝应县| 馆陶县|