Archiv pro štítek: převod

Online OCR s podporou češtiny

OCRNedávno jsem potřeboval získat text z obrázku ve formátu PNG. Mohl jsem pochopitelně otevřít libovolný textový editor a vše vyřešit pouhým přepsáním. Lidé se však snaží chodit zkratkami, a proto i já začal hledat lepší řešení v podobě technologie OCR sloužící k optickému rozpoznávání znaků. Objev v podobě portálu www.onlineocr.net mě překvapil jednoduchým rozhraním, online dostupností a podporou české diakritiky. Další kladné body projekt získal za možnost využití služeb bez nutnosti registrace.

Vyberte jazyk a výstupní formát

Nahrát lze obrázek o maximální velikosti čtyř megabajtů, i když  web uvádí jako maximální přípustnou hodnotu 4 mb, tedy megabity. Podpory se dočkaly nejběžnější soubory k reprezentaci obrázku (PNG, JPEG, BMP, GIF i TIFF). Uživatel zvolí pouze vstupní jazyk (v našich končinách půjde o Czech) a výstupní soubor (TXT, DOC či XLS). Po nahrání souboru stačí opsat snadno rozluštitelný captcha kód a rázem se zobrazí výsledek. Za hodinu lze takto zkonvertovat až 15 souborů.

Za registraci další funkce

Pakliže vás například limituje velikost nahrávaného souboru, stačí si vytvořit uživatelský účet. Rázem převedete až 100 MB, přičemž jednotlivé obrázky mohou být v jednom ZIP archívu. Výsledek lze dále stáhnout jako HTML, PDF či RTF. Výhody ovšem mají háček v podobě kreditového modelu. Každý kredit slouží k převodu jedné stránky. Po registraci jich obdržíte celkem 20 na vyzkoušení služby. Další lze případně dokoupit. Osobně jsem však vystačil s bezplatným modelem a žádná omezení jsem nezaznamenal.

Převod desetinného čísla do binární reprezentace

Tento text volně navazuje na článek popisující transformaci celého čísla do dvojkové soustavy. V několika ohledech na něj dokonce i odkazuje, proto doporučuji si nejprve prostudovat v něm popsané postupy. Následně můžete směle přikročit k převodu čísla s desetinnou čárkou.

Na úvod bude vhodné říci, že binární číslo pro aritmetické účely není jedinou možnou podobou údaje. Další formy symbolizují počítače a jejich způsoby ukládání binárních dat pro své vlastní účely.

Nejprve začnu převodem čísla v desítkové soustavě pro další matematické využití. Konkrétně půjde o 10,62510. Oddělím přitom od sebe celou a desetinnou část. Nyní se budu věnovat pouze 0,62510. Převod čísla 10 popisuje již zmíněný předcházející článek.

  • Mohu od 0,625 odečíst 1/2 bez toho, aby se dostal do záporných hodnot? ANO, učiním tak.
  • Mohu od 0,125 odečíst 1/4 bez toho, aby se dostal do záporných hodnot? NE
  • Vezměme opět 0,125. Mohu odečíst 1/8 bez toho, abych se dostal do záporných hodnot? ANO, učiním tak.
  • Zbývá nula, a proto převod končí. Pokud by se tak nestalo, pokračovali bychom dále s 1/16, 1/32, 1/64

Nyní nahradíme všechny odpovědi ANO jedničkou a tvrzení NE nulou. Výsledek zapisujeme směrem do horního údaje dolů. Získáváme tedy 1012. Přidáme-li 1010 v binární soustavě jako 10102, máme výsledek v podobě 1010,1012.

Nyní přichází na řadu reprezentace pro hardware počítače. Lze se vydat celkem dvěma cestami – pevnou nebo plovoucí desetinnou čárkou.

Pevná čárka

Nejprve si zvolíme počet míst za celou částí čísla, jenž budeme uchovávat. V našem případě půjde o 3. Dále musíme znát základ soustavy, do které převádíme, tedy 2. Provedeme jednoduchý výpočet 23 a tímto mezivýsledkem vynásobíme vstupní číslo, -10,62510 (povšimněte si přidaného znamínka mínus, jenž nám zajistí zajímavější postup). Pochopitelně -10,625 x 8 = -85. Z tohoto dalšího mezivýsledku oddělíme celou část (tedy -85) a tu následně převedeme do binární podoby. Využít můžeme například doplňkový kód – 101010112.

Plovoucí čárka

Transformace do podoby s proměnlivou řadovou čárkou se řadí mezi složitější operace. Podrobněji se ji například věnuje tento tutoriál. Výsledná hodnota se skládá celkem ze tří částí:

  • 1 bit pro znaménko (0 pro kladné číslo, 1 symbolizuje záporný údaj)
  • 8 bitů pro exponent
  • mantissa (normovaný tvar) – 23 bitů

Využijeme 1010,1012 z prvního příkladu a provede úpravu na tvar s exponentem, jenž zajistí existenci jediné číslice před desetinou čárkou -> 1,010101 x 23. Nyní zformujeme druhou část, k exponentu 3 přičteme 127 a provedeme převod do dvojkové soustavy -> 100000102. Zbývá mantissa, kterou však již již v podstatě disponujeme. Protože normovaný tvar neuchovává jedničku před čárkou využijeme pouze  ,010101. Výsledek vypadá takto:

0 10000010 01010100000000000000000

K ověření poslouží tato pomůcka.

Převod celého čísla do binární reprezentace

Následující text přehledně popisuje převod celého čísla v desítkové soustavě do binární podoby s pomocí několika rozdílných metod.

Výpočet hodnoty v dvojkové reprezentaci

Mezi jeden z nejzákladnějších úkonů patří převedení desítkového údaje do binární podoby. K dosažení tohoto cíle existuje několik metod, osobně za obzvláště efektivní považují postupné dělení. Zvolme si číslo 10010, kde dolní index značí použitou soustavu a proveďme samotný přepočet.

  • 100 : 2 = 50, zbytek 0
  • 50 : 2 = 25, zbytek 0
  • 25 : 2 = 12, zbytek 1
  • 12 : 2 = 6, zbytek 0
  • 6 : 2 = 3, zbytek 0
  • 3 : 2 = 1, zbytek 1
  • 1 : 2 = 0, zbytek 1
Postupně celočíselně dělíme zbývající části původního čísla dvojkou a pamatujeme si zbytky. Ty následně zapíšeme v obráceném pořadí a získáváme výsledný údaj – 11001002.

Dvojkově desítkový kód

Následující způsob převodu čísla si nejprve vstupní informaci rozdělí na jednotlivé cifry v desítkové soustavě a provede jejich transformaci s pomocí výše zmíněného postupu do binární podoby. Číslo 100 se tedy promění na tři části – 1, 0 a 0. Každá třetina využívá k uchování informace čtyři pozice, výsledek vzniká jejich spojením.

  • 110 = 00012
  • 010 = 00002
  • 010 = 00002
Dohromady tedy 0001000000002.

Přímý kód

Do hry nám vstupuje nutnost uložení i záporných záznamů. S jednoduchým řešením přichází princip vložení speciálního bitu, jenž indikuje přítomnost znaménka. Nejprve provedeme převod do binární podoby a poté na začátek přidáme příslušný bit (1 pro záporné číslo, kladný údaj získá 0).

  • 10010 = 011001002
  • -10010 = 111001002

Aditivní kód

S opravdu zajímavým řešením se o slovo hlásí následující princip vyžadující znalost určité konstanty. Ta se po získání dvojkové podoby k mezivýsledku binárně připočítá. Jako konstantu v tomto případě zvolíme např. 128 (27), což se rovná 100000002.

  • 10010 = 11001002 + 100000002 = 111001002
V případě záporného údaje pro rychlý výpočet použijeme odlišný postup. Nejprve od konstanty v desítkové soustavě odečteme absolutní hodnotu vstupního údaje a výsledek převedeme do dvojkové reprezentace.
  • -10010 = 128 – |-100| = 2810
  • 2810 = 111002

Inverzní kód

V případě kladného čísla se inverzní kód nijak neprojeví, spoléhá totiž na standardní převod do binární soustavy. U záporného údaje provede logickou negaci všech cifer a na začátek přidá bit o hodnotě 1 symbolizující znaménko.

  • na -100 aplikujeme absolutní hodnotu
  • 10010 = 11001002 (převod do dvojkové podoby)
  • 0011011 (logická negace)
  • 10011011 (přidání bitu)

Doplňkový kód

S podobným principem jako inverzní kód přichází i tato metoda. Kladná čísla opět nechává netknutá. U záporných také neguje cifry, přičemž navíc přidává binární připočítání hodnoty 1. Závěrem vstupuje na scénu bit s hodnotou 1 umístěný na začátek k signalizaci znaménka.

  • na -100 aplikujeme absolutní hodnotu
  • 10010 = 11001002 (převod do dvojkové podoby)
  • 0011011 (logická negace)
  • 0011100 (binární přičtení hodnoty 1)
  • 10011100 (přidání bitu)