Hallo liebe Mitglieder,
ich habe mich hier im Forum angemeldet, um die Programmiersprache zu lernen und wollte nun ein kleines Projekt starten.
Leider weiß ich nicht inwiefern dieses Projekt mit Python umsetzbar ist. Vielleicht habt ihr für mich Lösungsansätze.
Ich möchte gerne etwas programmieren womit ich automatisiert alle wichtigen Informationen aus einer technische Zeichnung (PDF-Dateien) auslesen und kategorisieren kann, damit ich später einen Preis automatisch kalkulieren kann.
Hierbei handelt es sich hauptsächlich um die CNC Bearbeitung von Dreh- und Frästeilen.
Für mich wäre die Informationen relevant die im Schriftfeld unten Link stehen...
- Welche Material soll verwendet werden?
- Oberflächenbehandlung?
- Wärmebehandlung?
- Welche Toleranzen müssen eingehalten werden?
- Welche Form- und Lagertoleranzen gibt es?
- Gibt es Prüfmaße?
Leider sind die Schriftfelder von jedem Kunden immer unterschiedlich.
Hier findet ihr ab Seite 16 ein paar Beispiel von den technischen Zeichnungen die ich meine:
http://www.gws-loerrach.de/media/abteil ... hniker.pdf
Technische Zeichnung (PDF-Dateien) auslesen und kategorisieren
Das ist IMHO illusorisch. Bei aehnlich strukturierten Dokumenten wie Rechnungen, die man ja inzwischen auch einscannen kann, zB in der iPad-App, sind nicht nur qualifizierte Programmierer am Werk gewesen - was du ja im Zweifel im Laufe der Zeit werden kannst - sondern vor allem auch umfassende Testdatensaetze vorhanden, und jede nicht erkannte Rechnung wird automatisch zur Verbesserung zurueck ins System gefuettert.
Das ist in meinen Augen (und ich habe auch ein bisschen Erfahrung mit Bilderkennung) nicht zu stemmen fuer einen alleine. Ich zB wuerde das nicht machen, wenn ich den Erfolg garantieren sollte. Und Python mache ich seit 20 Jahren, und CV Geschichten seit ~8. Natuerlich nicht Vollzeit, aber ein bisschen kenne ich mich eben aus.
Das ist in meinen Augen (und ich habe auch ein bisschen Erfahrung mit Bilderkennung) nicht zu stemmen fuer einen alleine. Ich zB wuerde das nicht machen, wenn ich den Erfolg garantieren sollte. Und Python mache ich seit 20 Jahren, und CV Geschichten seit ~8. Natuerlich nicht Vollzeit, aber ein bisschen kenne ich mich eben aus.
- __blackjack__
- User
- Beiträge: 13107
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Badboy566: Das Problem ist nicht nur das die Felder unterschiedlich sein können, sondern überhaupt solche Felder allgemein erkennen zu können. PDF ist als grafisches Anzeigeformat konzipiert, nicht um die Daten darin weiterzuverarbeiten.
PDF funktioniert so, dass die Daten die Seiten beschreiben. Es gibt also ”Befehle” um Seitenmasse festzulegen, Linien auf einer Seite zu zeichnen, Bitmapgrafiken auf einer Seite zu platzieren, Text auf einer Seite zu ”zeichnen”, eine Seite abzuschliessen und mit der nächsten weiter zu machen, und so weiter. Dabei ist die Reihenfolge (auf einer Seite) völlig dem Programm überlassen welches das PDF erstellt. Tabellen können also zeilenweise oder Spaltenweise aufgebaut werden und bestehen aus Linien und Text. Es können erst die Linien und dann der Text auf der Seite gesetzt werden. Oder erst der Text und dann die Linien. Oder gemischt, immer Linien und Text für eine Zelle. Text muss nicht zusammenhängend sein, der kann in Extremfall aus Position und Inhalt für jedes Zeichen einzeln bestehen. Verschiedene Teile vom Text können in beliebigen Reihenfolgen gesetzt werden. Zum Beispiel könnte für diese Tabelle rechts unten erst die Linien, dann die kleinen Überschriften der Felder und dann erst die Inhalte gesetzt werden. Es können Vorlagen definiert werden, so das beispielsweise das Grundgerüst mehrerer Seiten vordefiniert und dann mehrfach verwendet wird.
PDF funktioniert so, dass die Daten die Seiten beschreiben. Es gibt also ”Befehle” um Seitenmasse festzulegen, Linien auf einer Seite zu zeichnen, Bitmapgrafiken auf einer Seite zu platzieren, Text auf einer Seite zu ”zeichnen”, eine Seite abzuschliessen und mit der nächsten weiter zu machen, und so weiter. Dabei ist die Reihenfolge (auf einer Seite) völlig dem Programm überlassen welches das PDF erstellt. Tabellen können also zeilenweise oder Spaltenweise aufgebaut werden und bestehen aus Linien und Text. Es können erst die Linien und dann der Text auf der Seite gesetzt werden. Oder erst der Text und dann die Linien. Oder gemischt, immer Linien und Text für eine Zelle. Text muss nicht zusammenhängend sein, der kann in Extremfall aus Position und Inhalt für jedes Zeichen einzeln bestehen. Verschiedene Teile vom Text können in beliebigen Reihenfolgen gesetzt werden. Zum Beispiel könnte für diese Tabelle rechts unten erst die Linien, dann die kleinen Überschriften der Felder und dann erst die Inhalte gesetzt werden. Es können Vorlagen definiert werden, so das beispielsweise das Grundgerüst mehrerer Seiten vordefiniert und dann mehrfach verwendet wird.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Danke erstmal für eure Antworten.
Ich habe zumindest erstmal verstanden, dass es für einen Anfänger sehr schwer umsetzbar ist.
Die Informationen die ich eigentlich aus der PDF Datei auslesen möchte sind Textdateien. Also könnte man theoretisch nicht beim programmieren sagen, dass ich z.B. dem Programm sage es gibt so und soviel verschiedene Materialien wenn du eine davon in der 2D-Datei erkennst dann filter es für mich raus.
Ein zweiter Ansatz wäre es, das 3D-Model (Step-Datei) zu analysieren und damit den Preis zu kalkulieren, dass würde natürlich voraussetzten, dass der Konstrukteur alle relevanten Informationen in die STEP-Datei eingefügt hat (Material, Wärmebehandlung..)
So ein ähnliche Funktion bietet folgende Seite an:
https://www.youtube.com/watch?v=riEaSWrY1m0
Was mich aber bei dem Anbieter stört ist, dass man viele Sachen noch manuell selben eingeben muss.
Wie viel Aufwand ist es so ein Projekt umzusetzen? Mit viel Budget muss man rechnen?
Ich habe zumindest erstmal verstanden, dass es für einen Anfänger sehr schwer umsetzbar ist.
Die Informationen die ich eigentlich aus der PDF Datei auslesen möchte sind Textdateien. Also könnte man theoretisch nicht beim programmieren sagen, dass ich z.B. dem Programm sage es gibt so und soviel verschiedene Materialien wenn du eine davon in der 2D-Datei erkennst dann filter es für mich raus.
Ein zweiter Ansatz wäre es, das 3D-Model (Step-Datei) zu analysieren und damit den Preis zu kalkulieren, dass würde natürlich voraussetzten, dass der Konstrukteur alle relevanten Informationen in die STEP-Datei eingefügt hat (Material, Wärmebehandlung..)
So ein ähnliche Funktion bietet folgende Seite an:
https://www.youtube.com/watch?v=riEaSWrY1m0
Was mich aber bei dem Anbieter stört ist, dass man viele Sachen noch manuell selben eingeben muss.
Wie viel Aufwand ist es so ein Projekt umzusetzen? Mit viel Budget muss man rechnen?
Ich zweifel stark, dass sich die Sache mit dem PDF überhaupt unsetzen lässt. Wie hier bereits beschrieben wurde, enthält eine PDF-Datei Informationen über das Layout einer Seite. Ich sehe nicht, wir du da belastbare Dinge extrahieren kannst, die als Grundlage für eine Kalkulation dienen können.
Bei dem 3D-Model musst du schauen, ob das Format dokumentiert ist oder es vielleicht schon ein Modul gibt.
Bei dem 3D-Model musst du schauen, ob das Format dokumentiert ist oder es vielleicht schon ein Modul gibt.
-
- User
- Beiträge: 31
- Registriert: Samstag 16. Mai 2020, 18:52
Aber wie wäre es wenn man:
1. Die PDF, als JPG Dateien umwandelt.
2. Diese dann zurechtschneidet auf die Größe der Schriftfelder
3. Und wenn man nun die Suchbereiche genauer definiert,
kann man mit tesseract-ocr doch sicherlich brauchbare Ergebnisse bekommen.
Ich habe es mal manuell an der kompletten Zeichnung getestet und habe folgenden Textsalat als Ergebnis bekommen:
1. Die PDF, als JPG Dateien umwandelt.
2. Diese dann zurechtschneidet auf die Größe der Schriftfelder
3. Und wenn man nun die Suchbereiche genauer definiert,
kann man mit tesseract-ocr doch sicherlich brauchbare Ergebnisse bekommen.
Ich habe es mal manuell an der kompletten Zeichnung getestet und habe folgenden Textsalat als Ergebnis bekommen:
Code: Alles auswählen
Detected 26 diacritics
(20)
. € a
. WW
Y
10
50
60
Di
,
Ss \
!
M6
—_ | eo) 90°
- 0,5
ey iG
Tolerierung ISO 8015
DIN ISO 2768 mK ==
Kanten ISO 13715 | FLEN 10028 - 20x10
Werkstoff: S235JR
OB-
Oberflache DIN EN ISO 1302 u Gewicht: 0,092 kg
“Jean Metz “Jean Met? ‘Einzelteilzeichnung
GEWERBE f= ran
__ SCHULE Flachstahl 20x10-100 CAD Grundlagen
@LORRACH 0300 2016 3001 0001
Flachstahl 20x10-100.idw, © 31.01.2016, Jean Metz ze 00 31.01.2016 Ak 171
A
Das wäre schon das richtige Vorgehen, die PDFs als Grafiken zu betrachten. JPEG ist das dafür denkbar ungeeignetste Format, aber das ist natürlich leicht zu ändern. Und dann OCR mit Tesseract zu betreiben ist praktisch die einzige Option. Nur kommt danach noch eine matching engine, die aus diesen Bruchstücken versucht, brauchbare Informationen zu ziehen. Rechtschreibfehler, Lücken, Separationen alles inklusive.
Ich bleibe aber trotzdem bei meiner Einschätzung. Ein ähnliches Problem liegt vor, wenn man Rechnungen als Foto automatisch analysieren will. Sehr beschränkte Informationen die extrahiert werden wollen, alles Text. Aber trotzdem dauerte es Jahre, bis solche Systeme entwickelt waren. Es gibt ganze Firmen, deren einziger Zweck die digitalisierung zB von Rezepten für Medikament sind. Und auch an diesem einen, sehr wohl definierten Thema arbeiten die seit Jahren, und das bleibt auch so.
Es ist eine sehr anspruchsvolle Aufgabe. Nichts, was man nur weil man mal ne nette Idee hatte so eben macht.
Ich bleibe aber trotzdem bei meiner Einschätzung. Ein ähnliches Problem liegt vor, wenn man Rechnungen als Foto automatisch analysieren will. Sehr beschränkte Informationen die extrahiert werden wollen, alles Text. Aber trotzdem dauerte es Jahre, bis solche Systeme entwickelt waren. Es gibt ganze Firmen, deren einziger Zweck die digitalisierung zB von Rezepten für Medikament sind. Und auch an diesem einen, sehr wohl definierten Thema arbeiten die seit Jahren, und das bleibt auch so.
Es ist eine sehr anspruchsvolle Aufgabe. Nichts, was man nur weil man mal ne nette Idee hatte so eben macht.
-
- User
- Beiträge: 31
- Registriert: Samstag 16. Mai 2020, 18:52
Ja stimmt, die PDF direkt auszulesen bringt hier die besseren Ergebnisse.
Und der Suchbereich lässt sich auch definieren.
Unter Linux ist dies möglich mit pdftotext, aus dem poppler-utils packet.
Unter Windows ist dies möglich mit Xpdf (https://de.wikipedia.org/wiki/Xpdf).
Das komplette Schriftfeld ohne genauere Anpassung der Suchgröße:
Wenn man von einem Stammkunden immer sehr ähnliche Zeichnungen bekommt,
könnte man den Suchbereich auf den jeweiligen Kunden anpassen und bekommt jedes mal perfekte Ergebnisse.
Aber wenn die Schriftfelder immer anders sind , auch wenn sie vom selben Kunden kommen,
dann müsste man vermutlich doch mit einer Bilderkennung die Kästchen erkennen und auslesen
oder mit Regex sich eine Lösung zurechtbasteln.
Jedenfalls ist dies ein sehr großes Projekt und als Anfänger vielleicht zu groß .
Und der Suchbereich lässt sich auch definieren.
Unter Linux ist dies möglich mit pdftotext, aus dem poppler-utils packet.
Unter Windows ist dies möglich mit Xpdf (https://de.wikipedia.org/wiki/Xpdf).
Das komplette Schriftfeld ohne genauere Anpassung der Suchgröße:
Code: Alles auswählen
pdftotext -f 29 -l 29 -x 28 -y 685 -W 538 -H 128 technisches_Zeichnen_fuer_Techniker.pdf ausgabe.txt
Ausgabe:
Tolerierung ISO 8015
ISO 2768 mH
Oberfläche DIN EN ISO 1302 Kanten ISO 13715
Erstellt durch
Jean Metz
Dokumentenart
Einzelteilzeichnung
Genehmigt von
Jean Metz
Titel
Seilrolle D.112x7
Werkstoff:
Gewicht:
1.1191 (C45E)
1,224 kg
Halbzeug / Rohmaße
D. 135x30
Projekt
15. Gleitlager
Pos
Sachnummer
Menge
E011 2016 0011 0002
Maßstab
Änd.
Datum
Blattgr.
Blatt
1:1(1:2) 01 17.05.2017 A4 1 /1
könnte man den Suchbereich auf den jeweiligen Kunden anpassen und bekommt jedes mal perfekte Ergebnisse.
Aber wenn die Schriftfelder immer anders sind , auch wenn sie vom selben Kunden kommen,
dann müsste man vermutlich doch mit einer Bilderkennung die Kästchen erkennen und auslesen
oder mit Regex sich eine Lösung zurechtbasteln.
Jedenfalls ist dies ein sehr großes Projekt und als Anfänger vielleicht zu groß .
Alternativ zur eigene Programmierung kannst du einfach die API von Werk24 (eigenes Unternehmen) nutzen: https://Werk24.io
Wir geben Dir zu übermittelten Zeichnungen:
* Material (incl Übersetzung in die äquivalenten Weekstoffnummern)
* Zeichnungsnummer
* Liste der Alternativen Kundennummern
* Allgemeintoleranzen (incl Übersetzung Anwendung auf die untolerierten Maße auf der Zeichnung)
* weitere Details wie: Blattgröße, Massstab etc.
* die Revisionstabelle
Zusätzlich lesen wir die Schnitte aus und geben Dir:
* die Maße incl Toleranzen und übersetzen Passungen
* Gewinde (Metrisch und Amerikanisch)
* Leader
* Winkel
* (Oberflächen folgen)
Das Ganze funktioniert für PDF, PNG, TIFF etc. und kann auch mit Datein umgehen die falsch herum auf einem Fax lagen.
pip install werk24
Gruss Jochen
Wir geben Dir zu übermittelten Zeichnungen:
* Material (incl Übersetzung in die äquivalenten Weekstoffnummern)
* Zeichnungsnummer
* Liste der Alternativen Kundennummern
* Allgemeintoleranzen (incl Übersetzung Anwendung auf die untolerierten Maße auf der Zeichnung)
* weitere Details wie: Blattgröße, Massstab etc.
* die Revisionstabelle
Zusätzlich lesen wir die Schnitte aus und geben Dir:
* die Maße incl Toleranzen und übersetzen Passungen
* Gewinde (Metrisch und Amerikanisch)
* Leader
* Winkel
* (Oberflächen folgen)
Das Ganze funktioniert für PDF, PNG, TIFF etc. und kann auch mit Datein umgehen die falsch herum auf einem Fax lagen.
pip install werk24
Gruss Jochen
Alternativ zur eigene Programmierung kannst du einfach die API von Werk24 (eigenes Unternehmen) nutzen: https://Werk24.io
Wir geben Dir zu übermittelten Zeichnungen:
* Material (incl Übersetzung in die äquivalenten Weekstoffnummern)
* Zeichnungsnummer
* Liste der Alternativen Kundennummern
* Allgemeintoleranzen (incl Übersetzung Anwendung auf die untolerierten Maße auf der Zeichnung)
* weitere Details wie: Blattgröße, Massstab etc.
* die Revisionstabelle
Zusätzlich lesen wir die Schnitte aus und geben Dir:
* die Maße incl Toleranzen und übersetzen Passungen
* Gewinde (Metrisch und Amerikanisch)
* Leader
* Form und Lagetoleranzen
* Winkel
* (Oberflächen folgen)
Das Ganze funktioniert für PDF, PNG, TIFF etc. und kann auch mit Datein umgehen die falsch herum auf einem Fax lagen.
Du bekommst die Antwort als JSON.
pip install werk24
Gruss Jochen
Wir geben Dir zu übermittelten Zeichnungen:
* Material (incl Übersetzung in die äquivalenten Weekstoffnummern)
* Zeichnungsnummer
* Liste der Alternativen Kundennummern
* Allgemeintoleranzen (incl Übersetzung Anwendung auf die untolerierten Maße auf der Zeichnung)
* weitere Details wie: Blattgröße, Massstab etc.
* die Revisionstabelle
Zusätzlich lesen wir die Schnitte aus und geben Dir:
* die Maße incl Toleranzen und übersetzen Passungen
* Gewinde (Metrisch und Amerikanisch)
* Leader
* Form und Lagetoleranzen
* Winkel
* (Oberflächen folgen)
Das Ganze funktioniert für PDF, PNG, TIFF etc. und kann auch mit Datein umgehen die falsch herum auf einem Fax lagen.
Du bekommst die Antwort als JSON.
pip install werk24
Gruss Jochen
Hallo in die Gruppe,
Sorry dass ich die eigentlich schon beendete Diskussion nochmal Aufwärmen muss :/
Ich habe für eine Projektarbeit für die Uni ein ähnliches Problem. Wir sollen eine Technische Zeichnung via python Analysieren und Attribute dieser Zeichnung zuweisen. Letztendlich kann dann anhand der schar an Attributen und den uns zu Verfügung stehenden Lerndaten die Zeichnung einer Produktfamilie zugeordnet werden.
Nun aber zu meiner Prinzipiellen Idee: Eine Technische Zeichnung besitzt einen extrem hohen grad an DIN Normung (Schrift, Zeichen, Symbole, etc). Ist es möglich über eine Bilderkennung gewisse Symbole in einer Zeichnung zu erkennen ? Sprich das Symbol für Oberflächenrauheit oder Rundheit etc...
Falls ja wie gehe ich da am besten vor ?
Die Idee zur Vollendung ist dann falls ein solches Symbol in der Zeichnung erkannt wurde soll dieses Attribut oder Hash der Zeichnungsnummer zugewiesen werden. Daraus dann wie oben beschrieben Cluster und Produktfamilie zuweisen...
Achja ich habe tatsächlich ein Team von Studenten zur Hand welche auch alle python nicht zum ersten mal nutzen. Ich selber habe auch schon ein bisschen Erfahrung mit machine learning sowohl in python aber va. RapidMiner.
Ich danke euch schonmal für ein paar Denkanstöße
VG phonigs
Sorry dass ich die eigentlich schon beendete Diskussion nochmal Aufwärmen muss :/
Ich habe für eine Projektarbeit für die Uni ein ähnliches Problem. Wir sollen eine Technische Zeichnung via python Analysieren und Attribute dieser Zeichnung zuweisen. Letztendlich kann dann anhand der schar an Attributen und den uns zu Verfügung stehenden Lerndaten die Zeichnung einer Produktfamilie zugeordnet werden.
Nun aber zu meiner Prinzipiellen Idee: Eine Technische Zeichnung besitzt einen extrem hohen grad an DIN Normung (Schrift, Zeichen, Symbole, etc). Ist es möglich über eine Bilderkennung gewisse Symbole in einer Zeichnung zu erkennen ? Sprich das Symbol für Oberflächenrauheit oder Rundheit etc...
Falls ja wie gehe ich da am besten vor ?
Die Idee zur Vollendung ist dann falls ein solches Symbol in der Zeichnung erkannt wurde soll dieses Attribut oder Hash der Zeichnungsnummer zugewiesen werden. Daraus dann wie oben beschrieben Cluster und Produktfamilie zuweisen...
Achja ich habe tatsächlich ein Team von Studenten zur Hand welche auch alle python nicht zum ersten mal nutzen. Ich selber habe auch schon ein bisschen Erfahrung mit machine learning sowohl in python aber va. RapidMiner.
Ich danke euch schonmal für ein paar Denkanstöße
VG phonigs