Topic: trovare "blocchi di testo" in un'immagine usando python opencv e numpy  (Letto 270 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Cris

  • python unicellularis
  • *
  • Post: 3
  • Punti reputazione: 0
    • Mostra profilo
Ciao a tutti!
Sono nuovo nel forum, mi presento, sono Cris, ai primissimi passi in Python.  :)
Innanzitutto permettetemi di ringraziare l'intera Community del Forum, perché davvero sono stupefatto della competenza che generosamente e umanamente viene condivisa in rete.
Dovevo esprimere questo sentimento.
E vengo al dunque. Parto letteralmente da zero con il Python, anche se un po' di programmazione la mastico (ho avuto e ho a che fare con l'ing. elettronica).
Sto tentando di utilizzare uno script che ho rilevato in rete da un tizio che deve essere un mezzo genio, dopo essermi letto il minimo indispensabile sugli envs, sulle wheel, etc., ma brancolo nel buio come un cucciolo, soprattutto a causa di una (spero temporanea) mancanza di tempo per poter studiare.
Quello che mi necessiterebbe è utilizzare quello script senza sapere nulla di Python (mi serve terribilmente). Che cosa fa?
Esattamente ciò che mi serve: data una immagine .jpg, come la scansione di un documento o di una pagina di un libro, ritaglia solo ed esattamente il rettangolo minimo che sfiora il testo sui 4 lati, e crea una immagine .png che contiene solo quel crop. E qui mi necessiterebbe il vostro aiuto. Quando lancio lo script .py dalla PowerShell ottengo un messaggio di errore.
Ovviamente posso incollare le linee di codice dello script. Voglio cominciare a studiare Python, ma al momento avrei la necessità impellente di utilizzarlo.
Ovviamente sono dispostissimo a cercare di capire il più possibile facendomi direzionare da voi, cercando di farmi "scaldare la minestra" il meno possibile.
In fondo il Python dovrebbe avere parecchi gradi di parentela, (almeno in termini di costrutti) con altri linguaggi, ad es. il C.
Grazie a chiunque abbia la voglia e la possibilità di darmi una mano.
Ciao

Cris

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 2.851
  • Punti reputazione: 9
    • Mostra profilo
Re:trovare "blocchi di testo" in un'immagine usando python opencv e numpy
« Risposta #1 il: Febbraio 27, 2018, 09:22 »
Mah, è possibile che esista una ricettina passo-passo per la tua situazione. Però il problema è trovarla. Capisci, Python non è un "programma" che ha una sua autosufficienza, per cui lo installi e lui fa quel che deve. Python è un ecosistema che può variare, e che in qualche modo bisogna conoscere.
Secondo me hai due possibilità: o in qualche modo convinci quel "mezzo genio" a pacchettizzare il suo lavoro e a distribuirlo come un "programma", appunto.
Oppure ti impari un po' di rudimenti dell'ecosistema Python. Visto che parli di PowerShell, sei su Windows. La guida più completa che puoi trovare su come orientarti nell'ecosistema Python in Windows, guarda un po', è quella che ho scritto io (link in firma). Ti direi di leggerla, per cominciare. Ovviamente alcune sezioni non saranno fondamentali per te adesso, ma ti direi comunque di leggerla tutta per capire come vanno le cose. Poi, a fronte della tua conoscenza di questi elementi, se hai dei problemi a far girare il tuo script, torna qui e parliamone.

Detto questo, senza nulla togliere al tuo "mezzo genio": se lui ha implementato da zero un motore OCR, magari per esercizio, buon per lui. Ma direi che esistono già delle librerie che fanno questa cosa, in giro.

Offline Cris

  • python unicellularis
  • *
  • Post: 3
  • Punti reputazione: 0
    • Mostra profilo
Re:trovare "blocchi di testo" in un'immagine usando python opencv e numpy
« Risposta #2 il: Febbraio 27, 2018, 18:27 »
Ciao RicPol,

innanzitutto grazie per la risposta e gli ottimi consigli.
Penso proprio che seguirò entrambe le strade: comincerò senz'altro a leggere la guida che hai scritto, alla quale sono molto interessato (grazie per avermi segnalato il link).
Comincio a immergermi nell'ecosistema Python, "Windows flavour" come hai intuito, (sarebbe interessante poi anche affiancare quello al gusto di Linux, ma devo fare un passo per volta, con molta umiltà innanzitutto :), e intanto contatto quel famoso "mezzo genio" per vedere se ha voglia di scambiare due chiacchiere col sottoscritto (la tua soluzione di una pacchettizzazione sarebbe magnifica, ma non pretendo tanto! :)
Ad ogni modo lui scrive che si tratta proprio di parte di un progetto che sta portando avanti con la New York Public Library per tentare l'OCR di una grande collezione di cartoline che comincia negli anni 30 e che riporta delle immagini su un lato e con alcune righe di testo sull'altro, definita "Milstein Collection".

In effetti quindi, ci prendi anche su questo, non ha sviluppato un OCR, ma da qualche altra parte sul suo blog credo che lavori con il mitico Tesseract, un motore OCR Open Source con più di venti anni di sviluppo alle spalle. Comunque per passione e per lavoro utilizza parecchie librerie open source per risolvere i problemini che gli si presentano.

Intanto grazie ancora per le dritte e la tua attenzione e ... ci risentiamo un poco più avanti, quando avrò fatto qualche passo in più
A presto! Ciao!

Offline Cris

  • python unicellularis
  • *
  • Post: 3
  • Punti reputazione: 0
    • Mostra profilo
Re:trovare "blocchi di testo" in un'immagine usando python opencv e numpy
« Risposta #3 il: Febbraio 27, 2018, 18:45 »
Ciao RicPol,
sono ancora io e volevo dirti che la guida su "Come installare e usare Python su Windows" è proprio quella che mi sono letto per installare Python 3.6 e 2.7 sotto W10 (prima di iscrivermi al forum).
E, più che bene, è fatta da dio, perché partendo io da ZERO (analfabeta totale di Python) grazie a quella guida sono riuscito a installare i due ambienti insieme e che lavorano perfettamente.
Me la ero letta tutta. Quindi mi hai già dato una grossa mano!
Gli "Appunti wxPython" invece mi mancano completamente, ma hanno l'aria di essere un gran bel lavoro.

Grazie ancora e a presto

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 2.851
  • Punti reputazione: 9
    • Mostra profilo
Re:trovare "blocchi di testo" in un'immagine usando python opencv e numpy
« Risposta #4 il: Febbraio 28, 2018, 09:02 »
Dal tipo di lavoro che scrivi, è probabile che tesseract da solo faccia tutto quel che vuoi e anche il caffè. Tesseract è in grado di capire dove sta il testo; inoltre, suppongo che queste cartoline siano in "lotti" tutti uguali (che so, immagine a destra e testo a sinistra, con certi margini...). Se è così, al limite potresti ritagliare automaticamente la zona del testo (con Pillow/PIL, se vuoi usare python... ma anche un pre-processamento con un qualsiasi programmino in grado di fare batch task, come IrfanView per dire...), e poi passare solo quella a tesseract. Cioè, se le cartoline sono come questa http://www.metropostcard.com/picstopicals/t-prohibition.jpg.jpg e sono tutte diverse, probabilmente hai bisogno di un'AI che seleziona l'area di testo (ma ripeto, credo che tesseract sia in grado di pensarci per conto suo senza aiuti esterni). Ma se hai, per dire, un lotto di un milione di cartoline tutte di questo modello https://cdn.shopify.com/s/files/1/0232/1497/products/English_gown_postcard_front_1024x1024.jpg, allora basta ritagliare via la parte che non ti serve, se proprio vuoi (ma anche in questo caso, non mi preoccuperei troppo e proverei prima a dare la cosa in pasto a tesseract così com'è).