Technische Zeichnung (PDF-Dateien) auslesen und kategorisieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Badboy566
User
Beiträge: 2
Registriert: Donnerstag 22. Oktober 2020, 20:00

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
__deets__
User
Beiträge: 14540
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Benutzeravatar
__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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
DeaD_EyE
User
Beiträge: 1021
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Fordert die CAD-Dateien vom Kunden an, dann kann das CAD-Programm die Berechnungen durchführen.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Badboy566
User
Beiträge: 2
Registriert: Donnerstag 22. Oktober 2020, 20:00

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?
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

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.
__deets__
User
Beiträge: 14540
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ein Projekt wie die Webseite in deinem Video hat garantiert ein 6-stelliges Budget verschlungen. Das sind Monate Arbeit für mehrere Entwickler, Grafiker, Projektmanagement, UX-Design, OPS.
ElektroBerry
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:

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
__deets__
User
Beiträge: 14540
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

Warum sollte man den Weg über ocr gehen, wenn man den Text schon im pdf hat? Die Buchstaben in einer sinnvolle Reihenfolge zu sortieren ist eine viel einfachere und fehlerfreiere Aufgabe.
__deets__
User
Beiträge: 14540
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn du den Text im PDF hast. Muss er aber nicht sein, der kann auch einfach in Drawing-Primitive gewandelt worden sein. Und OCR gibt dir die Position, wie bestimmst du die aus einem Textfragment irgendwo im PDF?
ElektroBerry
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:

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

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ß .
Jmattes
User
Beiträge: 2
Registriert: Dienstag 23. März 2021, 08:09

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
Jmattes
User
Beiträge: 2
Registriert: Dienstag 23. März 2021, 08:09

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
phonigs
User
Beiträge: 2
Registriert: Dienstag 30. März 2021, 07:19

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
Antworten