Salutare tuturor,
Vreau să împărtășesc cu voi o idee și un experiment la care am lucrat în ultima vreme. Am pus la punct un sistem prin care transcriu automat actele vechi de stare civilă, direct din fotografii, folosind inteligența artificială,mai exact Gemini.
Ce e cel mai important pentru mine, și motivul pentru care am făcut asta, este că o transcriere OCR integrală adună absolut toate datele din document. Dacă se face doar o transcriere tipizată (gen într-un Google Sheet, unde introduci doar nume, prenume, an etc.), se pierde enorm din context și se pot omite detalii esențiale.
Unele legături genealogice se fac doar pentru că citești actul integral și vezi cine a fost martor, cine a declarat (poate un unchi sau un frate) sau ce mențiuni marginale există. O transcriere tabelară și structurată se poate face mult mai ușor după aceea (cu AI sau manual), dar baza trebuie să fie textul complet.
Cum am ajuns aici și cum funcționează scriptul:
Am început testând manual în interfața web (Google AI Studio), apoi am făcut un mic robot care dădea copy-paste în browser, dar mă loveam rapid de limitele gratuite de utilizare. Așa că am trecut la un script scris în Python care comunică direct prin API, rulând complet în fundal (fără să îmi mai blocheze tastatura sau mouse-ul).
Mai era o problemă majoră în browser: memoria. Când transcrii 70-100+ de acte la rând în aceeași fereastră de chat, AI-ul reține istoricul. La un moment dat, contextul devine prea încărcat și AI-ul începe să ,,halucineze" – adică încurcă numele din actul curent cu cele din actele anterioare sau inventează date(temperatura reduce halucinatiile, explic mai jos). Trecând la un script care comunică direct prin API, am rezolvat definitiv asta. Prin API, rularea este stateless (fără memorie). Fiecare poză trimisă este o interacțiune complet nouă, izolată. AI-ul are mintea ,,curată" la fiecare act, ceea ce elimină complet halucinațiile și garantează acuratețea de la prima până la ultima pagină.
Scriptul face niște lucruri destul de deștepte (creat tot cu AI):
Iau un folder cu zeci de poze. El citește folderul, sortează actele alfabetic și creează un sub-folder pentru a salva fiecare transcriere într-un mic fișier .txt separat.
În felul acesta, am implementat o funcție de verificare: dacă opresc scriptul la jumătate, la următoarea pornire el se uită în folder, vede ce a transcris deja, și reia fix de unde a rămas. Sau, dacă văd că o transcriere nu mi-a plăcut (AI-ul s-a încurcat etc.), șterg acel .txt mic, rulez scriptul, iar el va procesa din nou doar actul cu pricina.
La final, când toate imaginile sunt gata, asamblează toate fișierele mici într-un singur document mare cu tot fondul arhivistic respectiv. (Cine știe, poate pe viitor o să folosesc acele fișiere .txt individuale și pentru indexare rapidă).
În tot acest timp în care scriptul merge, eu pot folosi PC-ul la orice altceva, totul se întâmplă în fundal. Generează inclusiv un log detaliat ca să văd dacă o cerere a dat greș și trebuie reluată.
Acuratețe, Timp și Costuri:
Am testat recent un calup de 55 de imagini. Convertite din .tiff in .jpg cu XnConvert (Quality setat la 100%) Reduce dimensiunea imaginii cu 70-80% fără sa afecteze rezultatul.
Am folosit modelul Gemini 3 Flash Preview (experimental). Părerea mea este că acuratețea este 98-100%; mai greșește câte o litera sau cifra, de obicei la mențiunile adăugate ulterior scrise in grabă. De multe ori nu exista nici o greșeală.
Versiunea ,,Pro" este mai bună dar mai costisitoare. Până la urmă, actele sunt în general simple și folosesc un vocabular mic (cu mici excepții la căsătorii sau pe la vreo adopție, unde textul e mai complex).
Rezultatele testului de 55 de acte au arătat așa în logul meu:
19:44:25 [INFO] Total imagini în folder: 55
19:44:25 [INFO] Pornim procesarea simultană la API...
...
20:06:36 [INFO] SUCCES TOTAL! Toate datele sunt asamblate în siguranță.
A durat cam 22 de minute. Răspunsul prin API nu este instant, iar timpul depinde mult de modelul folosit (modelele stabile non-preview sunt mai rapide).
Ca idee de costuri, cele 55 de acte m-au costat prin API în jur 2.17 USD plus TVA.
Ca să faci asta automatizat la volum mare, trebuie folosită o cheie API de la Google. Aici e important de știut că acest serviciu se plătește. Totuși, vestea bună este că la crearea unui cont de Google Cloud primești automat credite gratuite (echivalentul a 300 de dolari). Facturarea se trage din acele credite, deci cu trialul acela poți procesa mii de acte gratis.
Secretul calității: Promptul și "Temperatura"
Aici trebuie să insist: scriptul e degeaba bun dacă nu îi dai AI-ului un prompt (un set de instrucțiuni) excelent și dacă nu îl setezi cum trebuie. Nu trebuie neapărat să știți cod, acest prompt merge folosit la fel de bine și manual, direct în browser, în interfața Google AI Studio.
Un secret vital acolo, pe lângă prompt, este setarea parametrului numit Temperature (îl găsiți în dreapta ecranului în AI Studio). Temperatura dictează cât de "creativ" are voie să fie AI-ul. Dacă e mare (ex. 1.0), AI-ul va inventa nume și va umple golurile cu ce i se pare lui că sună bine – un dezastru pentru paleografie. Eu țin temperatura extrem de mică, la 0.15. Așa îl forțez să fie "robot", să scrie strict ce vede și nimic altceva.
Ca să vă faceți o idee, vă las mai jos o variantă generalizată a promptului meu. Puteți să îl adaptați cu propriile dicționare de nume pentru satele pe care le cercetați voi:
ROL: Ești un motor AI de transcriere paleografică (OCR Avansat) pentru manuscrise românești vechi.
OBIECTIV UNIC: Transcrierea verbatim (cuvânt cu cuvânt) a imaginii, cu fidelitate 100% față de textul vizibil.
PROTOCOALE DE EXECUȚIE (STRICTE):
FIDELITATE VIZUALĂ ABSOLUTĂ: Scrie exclusiv ce vezi. Nu corecta gramatica, ortografia sau calculele scribului. Dacă textul spune "născut la 1880" dar vârsta zice "30 ani" (în anul 1900), tu transcrii "1880".
FOCALIZARE EXCLUSIVĂ PE SUBIECT: Ignoră complet paginile opuse, actele adiacente, coloanele tăiate sau textele care nu fac parte din actul principal. Transcrie DOAR actul central vizat și mențiunile sale marginale.
GESTIONAREA LIPSEI DE TEXT: Porțiuni complet lipsă: Marchează cu [...]. Litere incerte: Transcrie doar ce e sigur, adaugă [?] și avansează. Dacă un rând se termină brusc într-o margine ruptă, treci instant la rândul următor (salt pur vizual).
NUMERE ȘI DATE: Transcrie numerele scrise cu litere exact așa. NU converti în cifre în corpul textului.
FORMAT ȘI FLUX: Ignoră "New Line" din manuscris. Unește textul într-un singur bloc continuu, păstrând paragrafele logice. Păstrează majusculele originale.
CONTEXT GEOGRAFIC ȘI DICȚIONAR DE SUPORT: Fii atent la următoarele localități: [Introduceți localitățile aici]. Pentru a valida transcrierea numelor proprii ambigue, folosește lista de mai jos:
[Nume Frecvent 1], [Nume Frecvent 2], [Nume Frecvent 3]...
FORMAT FINAL DE RĂSPUNS:
Rândul 1: [NUMELE MARGINAL]
Rândul 2: [Tip Act - Număr]
Rândul 3: [CORPUL TEXTULUI CONTINUU]
Semnături:
[Lista semnăturilor]
[MENȚIUNI MARGINALE - dacă există]
Sunt curios ce părere aveți și dacă ați mai experimentat cu așa ceva. Am adăugat si un screenshot cu API Usage pentru cele 55 de imagini.
Sună promițător!
Cum arată documentele? În ce limbă sunt scrise? Cât e scis de mână și cât de tipar?
Exemplu:
PH-FD-00006-291-1(PR5)_01_Page_082.jpg)
Neculae Ion Neculae - Mihai Crețu.
Act de Nascere - No. 82.
Din anul una mie noue sute unu spre-zece, luna August, ziua întâie, la orele noue dimineața. - Act de Nasterea copilului Neculae, de secsul bărbătesc de religiune ortodoxă, născut astăzi pe la orele șapte dimineața în casa părinților săi. - Fiu legitim al Dlui Ion Neculae Mihai Crețu, în etate de ani trei-zeci, și al Dnei Maria soția sa, în etate de ani două-zeci și patru, ambii de religiune ortodoxă, de naționalitate și protecțiune română, de profesiune muncitori domiciliați în comuna Teșila. - Dupe declarațiunea făcută de tatăl care ne-au înfățișat copilul. - Martori au fost: Ion Gheorghe Pintea, în etate de ani patru-zeci, și Ion Ion-Alexandru, în etate de ani patru-zeci și cinci, ambii de profesiune muncitori, domiciliați în comuna Teșila, care împreună cu declarantule n'au putut subscrie acest act, dupe ce li s'au citit neștiind carte, subscriindu-se de noi împreună cu notarul Comunei. - Constatat dupe lege de noi însume G. H. Drăgănescu, primarul și oficierul stărei civile al Comunei Teșila, din Județul Prahova, asistat fiind și de Dl M. Drăghicescu, notarul respectiv. -
Primar oficier G. H. Drăgănescu
Notar M. Drăghicescu
[MENȚIUNI MARGINALE]
Mort act No. 1/913
----------------------
Greseli:
Ion Gheorghe Pintea in loc de Ion Gheorghe Țintea
Confirm și eu capabilitățile modelelor de la Google (am experimentat cu varianta Gemini 3.1 Pro) pe partea de OCR cu rezultate bune spre foarte bune pentru paginile cu scris cursiv și citeț.
Citat din: Kristian din Mar 30, 2026, 10:40 PMCe e cel mai important pentru mine, și motivul pentru care am făcut asta, este că o transcriere OCR integrală adună absolut toate datele din document. Dacă se face doar o transcriere tipizată (gen într-un Google Sheet, unde introduci doar nume, prenume, an etc.), se pierde enorm din context și se pot omite detalii esențiale.
Unele legături genealogice se fac doar pentru că citești actul integral și vezi cine a fost martor, cine a declarat (poate un unchi sau un frate) sau ce mențiuni marginale există. O transcriere tabelară și structurată se poate face mult mai ușor după aceea (cu AI sau manual), dar baza trebuie să fie textul complet.
O transcriere tipizată completă (manuală sau nu) de pe un act de stare civilă, totuși, înscrie tot contextul relevant și anume data și locația evenimentului, participanții principali și martorii împreună cu rolul fiecăruia. Asta dacă nu se urmărește un index/opis al registrului, lucru oricum valoros în lipsa altui fel de transcriere.
Firește că pentru un cercetător interesat de o singură localitate/comună sau în general o zonă restrânsă, metoda de transcriere integrală este îndreptățită. Nu știu însă în ce măsură schema rămâne scalabilă dacă vrem să ne ocupăm de o zonă lărgită.
Pentru mine dicolo de efectul waw inca nu e fiabil.
Am făcut și eu un mic experiment cu inteligența artificială. Am pornit totuși de la ideea că rezultatul final trebuie să fie în formă tipizată, care cred că este mai adecvată pentru o bază de date.
Am ales o sursă care m-am gândit că ar trebui să fie destul de ușor de prelucrat: declarațiile de căsătorie primite la oficiul stării civile din București, publicate în Monitorul comunal al primăriei municipiului București. Acestea conțin un set destul de standardizat de informații și, deși nu sunt acte de căsătorie propriu-zise, cred că ar merita transcrise din următoarele motive:
- sunt disponibile online, gratuit, la Biblioteca Digitală a Bucureștilor (http://digitool.bibmet.ro:8881/R/MC8MF1C11FT33RBVDRI3LDFFCM8RBJ3KEVY6VN45HNLU2P66DB-06965?func=collections&collection_id=4994) și, într-o măsură ceva mai redusă, pe Wikimedia (https://commons.wikimedia.org/wiki/Category:Monitorul_Prim%C4%83riei_Bucure%C8%99ti);
- numerele disponibile acoperă aproape toată perioada din 1877 până în 1949, un interval cu mult mai extins decât cel pentru care sunt disponibile actele de stare civilă din București pe site-ul Arhivelor Naționale, respectiv 1902-1913;
- pe Arcanum, cel puțin deocamdată, Monitorul comunal nu este disponibil;
- e vorba de texte tipărite, nu scrise de mână, ceea ce ușurează transcrierea, fie ea automată sau manuală;
- fiind vorba de București, căutarea la sală prin dosare neindexate nu este practică dacă se cunoaște doar cu aproximație anul căsătoriei, în timp ce dacă se poate identifica declarația de căsătorie, se poate presupune că ea precedă de obicei căsătoria cu una sau câteva săptămâni;
- în unele cazuri, probabil destul de rare totuși, declarația de căsătorie nu este urmată de căsătorie, după cum am văzut aici (https://forum.genealogica.ro/index.php?topic=540.msg3528#msg3528), și de aceea poate reprezenta o sursă interesantă în sine.
Am făcut niște probe cu Le Chat de la Mistral, pentru că prefer să folosesc opțiunea europeană atunci când este posibil. Nu am prea multă experiență cu inteligența artificială și nu îmi pot da seama cât de performant este Mistral în comparație cu alți asistenți AI, însă cel puțin pe partea de OCR ei se laudă că este foarte capabil să înțeleagă structura documentelor.
Am făcut probe cu două numere din 1914 ale Monitorului comunal; atașez tabelele rezultate (sunt fișiere csv cu punctul și virgula ca separator). În general structurarea informației a decurs foarte bine de la bun început. De exemplu numele de familie la naștere al viitoarei soții și ocupația soției sunt informații care apar doar foarte rar, dar Le Chat nu a avut nicio problemă în a identifica corect cuvintele care trebuiau trecute în aceste coloane și în a lăsa cele două coloane goale la restul cuplurilor.
Pe partea de OCR Mistral s-a descurcat foarte bine, însă nu chiar atât de extraordinar pe cât m-aș fi așteptat. La numărul din 2 martie 1914 a avut 15 greșeli (din care 5 legate strict de diacritice) la 59 de cupluri, iar la numărul din 21 decembrie 1914 a avut 26 de greșeli (din care 16 legate strict de diacritice) la 74 de cupluri. Bineînțeles, majoritatea covârșitoare a greșelilor a apărut la nume proprii; la numere nu a făcut nicio greșeală, iar la meserii a făcut o singură greșeală, însă era vorba de o greșeală în original, unde scria
tămplar, pe care Mistral l-a transcris
tâmplar.
Concluzia ar fi că rezultatele sunt foarte bune și fără verificare manuală, dar dacă se dorește o transcriere fidelă, fără nicio greșeală, atunci verificarea manuală este necesară.
O altă etapă care se pare că e mai bine să fie făcută manual este extragerea paginilor cu declarații de căsătorie. Un număr din Monitorul comunal are, în funcție de perioadă, pe la 15-30 de pagini, uneori chiar și mai multe, însă partea cu declarațiile de căsătorie acoperă doar 2-3 pagini. Dacă se încarcă fișierul pdf cu numărul complet, așa cum este disponibil online, Mistral poate să identifice secțiunea cu declarații de căsătorie, însă am impresia că analizează întâi tot fișierul, ceea ce consumă inutil de multe resurse.
Menționez că am folosit doar versiunea gratuită a Le Chat. Apreciez orice păreri sau sfaturi pe care mi le puteți oferi.
Și eu cred că este o sursă bună de informație genealogică pentru București, ai punctat foarte bine motivația pentru valorificarea lor.
Din documentația Mistral nu e clar câte încărcări se pot face de pe un cont gratuit dar cu siguranță vor fi limitări per cantitate de fișiere încărcate. Deci o etapă de extragere a paginilor relevante are sens (se poate folosi un script care parcurge fișierele pdf și identifică începutul și sfârșitul zonei de interes).
Dacă preferi firmele europene sau soluțiile open source gratuite, strict pentru OCR recomand și OCRmyPDF care folosește Tesseract (https://github.com/ocrmypdf/ocrmypdf), folosind un dicționar românesc.
Dacă dorești să includem transcrierile în baza de date, putem eventual să corectăm greșelile pe parcurs.
Salutare!
Am făcut și eu câteva teste pentru automatizarea transcrierii unor documente.
M-am concentrat asupra fișelor matricole penale publicate de IICCMER, care sunt într-un format mixt: un șablon imprimat și date scrise de mâină (mâini diferite) sau, în cazuri rare, bătute la mașină. Există patru tipuri de șabloane, cu câteva mici sub-tipuri, iar informația inclusă în ele variază. Fișele sunt completate și pe față și pe verso, dar am optat pentru transcrierea unei singure fețe, din considerente de cost, reversul conținând oricum informații de regulă tehnice: transferuri, ieșiri provizorii, semnătura celui care a întocmit fișa, amprenta deținutului etc.
În total, IICCMER a publicat fișe matricole pentru 76000 de foști deținuți politic, în total circa 150.000 de fișe (deci circa 300.000 de imagini recto+verso).
Cu un mic Python script, imaginile se pot descărca de pe site fără mari probleme. Am descărcat un calup de vreo 2000 în circa 20 de minute, cu un timer de 0.6 secunde între accesări ca să nu primească IP-ul un ban.
Am încercat diverse opțiuni (Gemini, Claude, ChatGPT, Transkribus etc.). Scopul meu fiind să obțin un .csv structurat și să nu trebuiască să sortez imaginile în prealabil după tipul de șablon. Cele mai bune rezultate au fost cu Handwriting OCR, o companie din Londra.
Iată aici tabela pe care am obținut-o pentru 26 de fișe de diverse tipuri:
https://docs.google.com/spreadsheets/d/1Of2NJpsdPTMC2RnwPHnpjYoSVoz-N6-FCc6aiMqaOgY/edit?usp=sharing
În caractere aldine am marcat greșelile. Nu am uniformizat formatul numelor și datelor, tocmai pentru a înțelege mai bine de unde provin eventualele erori.
Cele mai multe greșeli sunt la numele de comune și adrese (13 din 46).
Numele de persoane nu au greșeli majore, cu excepția unei file a cărei fotocopie nu este focalizată, unde Albu a devenit Virgiliu. În rest vorbim de omiterea unor inițiale, o Ionela devenită Ionel, Nica / Micu, etc.
Pasajele descriptive, referitoare la ocupații, serviciul militar, semnalmentele fizice, arestare, crimă etc., au fost surptinzător de bine transcrise, uneori chiar în situații în care eu nu am recunoscut textul la prima vedere. Nici acestea nu sunt perfecte, un cioban a devenit cizmar, lipsa piciorului stâng de la genunchi este lipsa degetului de la piciorul stâng etc., dar în mare sunt rezultate bune.
În general este ceva folosibil, dar care probabil necesită o corectură manuală la final.
Timpul este foarte rapid, circa 5-10 secunde pagina
Problema majoră ar rămâne costurile. Ca în cazul lui
@Kristian , și eu am calculat un cost de circa 4-5 eurocenți per pagină, cam la toate variantele. Pentru 150.000 de pagini asta ar însemna 6-7000 de euro. Un cost semnificativ, mai ales că rezultatele trebuie parcurse manual pentru corecturi.
Cu toate acestea, sper că la un moment dat acestea vor fi transcrise, pentru că au o valoare de cercetare imensă pentru istoria acestei perioade triste.
Atașez și primele 10 pagini aici, restul fiind la acest link:
https://drive.google.com/drive/folders/1OqK6yH8UKhol91QFSMc_3hsQPdcpxZAc?usp=sharing