**Tekstintunnistus** (engl. *Optical character recognition*, OCR) on yleisnimi teknologialle, jonka avulla tunnistetaan koneellisesti (varsinainen "OCR") tai käsin kirjoittamalla ("ICR", "Intelligent Character Recognition") tuotettua tekstiä, tai esimerkiksi kyselylomakkeiden rastitettuja ruutuja ("OMR", "Optical Mark Recognition") sähköisesti muokattavaan muotoon. Tunnistettava teksti on usein paperilla esim. erilaisissa asiakirjoissa, lehdissä tai erilaisissa kyselylomakkeissa, mutta voi olla myös saapuneissa sähköpostiviesteissä, tai www-sivujen palautteissa.

Historiaa
---------

CMC-7 -kirjasin
OCR-A -kirjasin
OCR-teknologia syntyi vuonna 1929, kun Gustav Tauschek haki Saksassa ensimmäisen patenttinsa hahmojen tunnistamiseen. Tekstin tunnistamisen teknologia lähti varsinaisesti kehitykseen 1950-luvulla, jolloin sitä käytettiin aluksi pankkisekkeihin painettujen kirjasimien tunnistamiseen. Tätä kutsuttiin MICR-teknologiaksi (Magnetic Ink Character Recognition) ja sille tyypillisiä kirjasimia olivat E-13B ja CMC-7. Tässä sekkien MICR-kirjasimet painettiin musteella, joka sisälsi rautaoksidia. Sekit luettiin erityisellä laitteella, jonka lukupää tunnisti merkit niiden magneettisuuden perusteella. 1960-luvulla yleistyi merkkien optinen tunnistaminen eli varsinainen OCR-teknologia. Tätä varten kehitettiin erityiset kirjasintyypit OCR-A ja OCR-B. Vakiotyyppisten kirjasimien tunnistaminen oli helpompaa ja virheettömämpää. Nykyään esimerkiksi Xerox markkinoi tulostimia joissa voidaan käyttää MICR väriainetta, jolloin tulosteet ovat luettavissa MICR lukijoilla.

Teknologia
----------

Merkintunnistuksessa (erityisesti "OCR" ja "ICR") kootaan skannatusta asiakirjasta havaittuja pikseleitä (pisteitä) ja verrataan niiden muodostamia hahmoja olemassa oleviin kirjainhahmoihin ja pyritään näin tunnistamaan oikea merkki, joka voi olla esimerkiksi kirjain, numero tai jokin erikoismerkki. OMR:n kohdalla ohjelmistolle annetaan koordinaatein merkitty alue ("ruutu") josta ohjelmisto "lukee" pikseleiden määrän, ja jos tummien pikseleiden määrä ylittää annetun raja-arvon tulkitaan "ruutu" rastitetuksi.

Tyypillinen merkintunnistuksen virhe on yksittäisten kirjainten ja numeroiden sekoittuminen. Helposti vaihtuvia pareja ovat esimerkiksi iso i ja pieni l ("äl") sekä numero 8 ja kirjain S. Kun merkeistä tunnistetaan kokonainen ryhmä, voidaan tätä ryhmää vertailla kieliopin mahdollisiin sanoihin, jolloin voidaan automatisoidusti päätellä tunnistuksen oikeellisuus. Tämä nopeuttaa varsinaista ohjelmallisen tunnistuksen oikeellisuuden tarkistamisen työvaihetta, koska korjattavaa on vähemän.

Tunnistuksen oikeellisuutta voidaan olennaisesti saada tarkemmaksi, jos luettu tieto voidaan tarkistaa myös muulla menetelmällä (kuten esimerkiksi henkilötunnus, passin numero, ajokortin numero, pankkitilin numero, pankkiviitteen numero, joissa esiintyy matemaattisen algoritmin avulla tarkistettavissa oleva tarkistetieto).

Tekstin tunnistamista helpottaa, jos skannattavassa asiakirjassa käytetään tasavälistä kirjasintyyppiä kuten Courier, mutta ohjelmistot ja laitteet kykenevät tunnistamaan myös useita muita kirjasintyyppejä.

Skannattavan kuvan suoristamisella ja tekstisuunnan samanmuotoisuudella (kaikki sivut samansuuntaisiksi) nostetaan lopputuloksen tarkkuutta. Useissa ohjelmistoissa on myös kuvanparannustoimintoja, joilla skannattavasta kuvasta voidaan poistaa ylimääräisiä pisteitä ja muita häiriöitä.

Tekstintunnistamisen oikeellisuuteen vaikuttaa asiakirjasta digitoimalla (skannaamalla) aikaan saadun kuvan laatu sekä sen lukutarkkuus. Erityisesti kontrasti vaikuttaa suuresti tunnistuksen toimivuuteen (selkeästi valkoinen tausta ja teräväreunaiset mustat kirjaimet). Lopputuloksen oikeellisuus paranee käytettäessä optimaalista lukutarkkuutta (dpi, dots per inch). Perinteisen merkintunnistuksen lukutarkkuutena käytetään yleisesti resoluutiota 300 dpi (Dots Per Inch). Viivakoodeja – kuten laskuissa esiintyvä pankkiviivakoodi – luettaessa voidaan käyttää myös 200 dpi:n resoluutiota. Liian suuri resoluutio tuo yleensä kuvaan liikaa informaatiota ("kohinaa", taustavärin pisteitä, jotka sumentavat luettavien merkkien reunoja ja siten huonotavat merkintunnistusohjelmiston toiminnan edellytyksiä).

Jotkut tekniikat tekevät useita OCR-lähetyksiä, ja kun enemmän tietoja tunnistetaan, se*selvennä* poistetaan väliaikaisesti, jotta jäljellä oleva teksti tunnistetaan oikein. Tämä menetelmä tunnetaan synteettisenä tai monipäästöisenä OCR:nä

Tekstintunnistusteknologiaa hyödynnetään erilaisissa sovelluksissa, joissa erimuotoisista asiakirjoista pyritään automatisoidusti hakemaan, löytämään ja lukemaan niissä olevaa ja/tai niitä yksilöiviä tietoja joko käytettäväksi kyseisten asiakirjojen indeksitietoina (hakutekijöinä) tai niiden sisältämänä tietona. Tämä tieto viedään edelleen johonkin vastaanottavaan järjestelmään. Esimerkkejä tällaisista ovat laskut, sopimukset, tilaukset, pankkien maksupalvelutoimeksiannot, kyselylomakkeet, markkinatutkimukset ja muut asiakirjat, joissa on jäsenneltävää sisältöä, jonka hallintaa pyritään systematisoimaan.

Käyttökohteet
-------------

Tekstintunnistusohjelmisto tuottaa yleensä "raakatekstiä", jonka oikeellisuus riippuu ohjelmiston kyvystä "lukea" sille annettuja asiakirjoja.

Eri ohjelmistosovellukset käyttävät tällaista varsinaisen tekstintunnistuksen tuottamaa "raakatekstiä" oman toimintansa pohjana. Tekstintunnistusta hyödyntävien sovellusten avulla pyritään vähentämään manuaalisia työvaiheita asiakirjojen käsittelyssä ja automatisoimaan erilaisia prosesseja. Teknologiaa hyödynnetään myös sellaisissa tarkoituksissa joissa paperilla oleva, tai digitaalinen (esimerkiksi PDF) asiakirja halutaan saattaa muokattavaan muotoon siihen tehtävien muutosten vuoksi. Tekstintunnistusta hyödyntävillä sovelluksilla on myös merkittävä rooli rutiininen, esimerkiksi asiakirjojen tietojen manuaalisen syötön, korvaajana lomakkeiden, sopimusten, hakemusten ja laskujen tietojen haltuunoton yhteydessä kun asiakirjojen sisältämät tiedot halutaan tallentaa liiketoiminnan prosessia varten ("scan to process"), tai asiakirjat itsessään halutaan indeksoida ja tallentaa myöhempää käyttöä varten ("scan to archive").

Merkintunnistus- ("OCR")toimintoja on myös boteissa jotka kiertelevät keskustelupalstoilla ja lähettelevät roskapostia. OCR-toiminto antaa botille mahdollisuuden läpäistä kuvavarmennustesti (CAPTCHA).

Ohjelmistoja
------------

Tekstin(merkin-)tunnistamiseen erikoistuneita ohjelmia ("OCR engine") ovat mm.

* ABBYY FineReader
* Nicomsoft OCR
* Omnipage
* Tesseract (HP:n kehittämä, sittemmin Googlen tukema "open source" OCR-ohjelmisto)
* Grooper

Sovellusohjelmistoja jotka käyttävät eri tekstintunnistusohjelmistoja (yhtä tai useampaa) osana omaa toimintaansa, ja jotka yleensä keskittyvät tiettyyn asiakirjatyyppiin (esim. lasku, lomake, kokosivun tunnistus)

* AnyDoc Software (USA, nykyään osana Hyland Softwarea, USA)
* HP TeleForm (alun perin nimeltään Cardiff TeleForm)
* I.R.I.S. (Belgia. Kuuluu Canon -ryhmään)
	+ I.R.I.S. Capture Pro for Forms (lomaketunnistukseen)
	+ I.R.I.S. Capture Pro for Invoices (laskujen tunnistukseen)
	+ I.R.I.S. ReadIRIS Pro ("full page OCR", koko asiakirjan sisällön tunnistukseen)
* ReadSoft (Ruotsi. Lexmark osti Readsoftin syksyllä 2014 liittääkseen sen Perceptive Software -yksikköönsä)
	+ ReadSoft Documents for Invoices (laskujen tunnistukseen)
	+ ReadSoft Documents for Forms (lomaketunnistukseen)
	+ ReadSoft Documents (asiakirjojen luokitteluun ja yleisluontoiseen invoices tai forms -tyyppisten asiakirjojen tunnistukseen)

2020-luvulla esimerkiksi Microsoft Word / Excel / OneNote, Adobe Acrobat DC ja Google Docs sisältävät tekstintunnistuksen.

Lähteet
-------

1. ↑  Misidentification of Alphanumeric Symbols  5.6.2014. Institute for Safe Medication Practices. Viitattu 4.9.2020.
2. ↑  How to get Perfect OCR. Bisok.com. Viitattu 1.7.2021.
3. ↑

Aiheesta muualla
----------------

CommonsCommons
Wikimedia Commonsissa on kuvia tai muita tiedostoja aiheesta **Tekstintunnistus**.
* The History of OCR Technology (Arkistoitu – Internet Archive)
* OCR and ICR Overview (Arkistoitu – Internet Archive)
* Kenneth R. Eldridge "Automatic Reading System"
* Tesseract