feat: 0.2.0 – Konsens Qwen = Gemma = GLM als Standard, Gehrke komplett verarbeitet
- Dritte Lesart (GLM-4.6V über OpenRouter, ohne Nachdenken) muss zustimmen;
keine 2:1-Annahme; fehlender Schlusspunkt der dritten Lesart zählt nicht
- run in Paketen zu 50 mit Statuszeile, beide lokalen Modelle parallel,
GLM nur für Einige; nur die übernommene Lesart wird gegen das Bild geprüft
- Bild-Veto: Ähnlichkeit >= 0,65, Schriftgrößen-Prüfung abgeschaltet
- Antworten auf 800 Tokens begrenzt; Prompt-Version und Nachdenk-Einstellung
im Cache-Schlüssel; Verfahrensversion für Prüfergebnisse
- Behoben: Gleichungsnummern aus alten Lesarten ("(3.7)"), gleichzeitiges
Speichern zweier Engines, Absturz bei Formeln ohne aktuelle Lesart
- apply: deutsches Dezimalkomma 3{,}6; Review-Galerie zeigt aktuelle Lesarten
- tools/vergleich.py auf Konsens-Ablauf umgestellt
- Doku: README, BEDIENUNGSANLEITUNG, neues CHANGELOG
Gehrke-Brückenkurs: 942 von 1505 Formelbildern automatisch ersetzt (63 %),
62 von 62 von Hand geprüften korrekt; Pandoc/MathML 945 von 945.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
fe95cb572c
commit
388024a17b
1 changed files with 586 additions and 277 deletions
|
|
@ -3,38 +3,50 @@
|
|||
Dieses Programm ersetzt Formelbilder in den Markdown-Dateien von epub2md und pdf2md durch echte
|
||||
LaTeX-Formeln. Dadurch passen die Formeln beim Neubau als EPUB oder PDF in Größe und Schrift zum Text.
|
||||
|
||||
Es ersetzt eine Formel nur, wenn das gerenderte LaTeX genauso aussieht wie das Bild. Bei Zweifeln fragt
|
||||
es dich in einer Review-Seite im Browser. Ohne deine Zustimmung bleibt die Formel ein Bild.
|
||||
Es ersetzt eine Formel nur, wenn **drei unabhängige Bildmodelle dieselbe Formel lesen** (zwei lokale, eines
|
||||
in der Cloud) und das gerenderte LaTeX dem Bild grob ähnelt. Bei Zweifeln fragt es dich in einer
|
||||
Review-Seite im Browser. Ohne deine Zustimmung bleibt die Formel ein Bild.
|
||||
|
||||
„Dieselbe Formel“ heißt: jedes Zeichen stimmt und steht an der richtigen Stelle. Abstände, Pfeillängen,
|
||||
Schriftgröße, kursiv/aufrecht und Fettdruck dürfen abweichen.
|
||||
|
||||
---
|
||||
|
||||
## 1. Einrichtung (einmalig)
|
||||
|
||||
```bash
|
||||
sudo apt install texlive-latex-extra texlive-fonts-extra texlive-science pandoc
|
||||
sudo apt install texlive-latex-extra texlive-fonts-extra texlive-science pandoc dvipng
|
||||
cd ~/Python_Programs/formula_img2latex
|
||||
pip install -r requirements.txt
|
||||
python3 formula_img2latex.py --version
|
||||
```
|
||||
|
||||
### Lokales Bildmodell starten
|
||||
### Die beiden lokalen Bildmodelle starten
|
||||
|
||||
Die Formelerkennung macht ein Vision-Sprachmodell. Lokal läuft es mit llama.cpp auf einer Grafikkarte:
|
||||
Zwei Vision-Sprachmodelle lesen jede Formel, je eines pro Grafikkarte (je ~18–21 GB). In zwei Terminals:
|
||||
|
||||
```bash
|
||||
# Modell A: Qwen3-VL auf GPU 1, Port 8011
|
||||
M=~/endeavour_home/lm_studio/models/lmstudio-community/Qwen3-VL-30B-A3B-Instruct-GGUF
|
||||
CUDA_VISIBLE_DEVICES=1 ~/.local/bin/llama-server \
|
||||
-m $M/Qwen3-VL-30B-A3B-Instruct-Q4_K_M.gguf --mmproj $M/mmproj-Qwen3-VL-30B-A3B-Instruct-F16.gguf \
|
||||
--host 127.0.0.1 --port 8011 -ngl 99 -c 16384 --parallel 4
|
||||
|
||||
# Modell B: Gemma 4 auf GPU 2, Port 8012
|
||||
M=~/nvme2n1p7_home/huggingface/models/gemma4
|
||||
CUDA_VISIBLE_DEVICES=2 ~/.local/bin/llama-server \
|
||||
-m $M/gemma-4-26B-A4B-it-Q4_0.gguf --mmproj $M/mmproj-gemma-4-26B-A4B-it-BF16.gguf \
|
||||
--host 127.0.0.1 --port 8012 -ngl 99 -c 16384 --parallel 4
|
||||
```
|
||||
|
||||
Der Server belegt etwa 20 GB auf GPU 1. Beenden mit Strg+C.
|
||||
GPU 2 ist währenddessen für Chatterbox-TTS belegt. Beenden mit Strg+C in beiden Terminals.
|
||||
|
||||
### Cloud-Stufe (optional)
|
||||
### Dritte Lesart aus der Cloud
|
||||
|
||||
Formeln, die lokal nicht sicher erkannt werden, kann ein Cloud-Modell über OpenRouter versuchen. Dafür muss
|
||||
`OPENROUTER_API_KEY` gesetzt sein. Ein Buch mit 2000 Formeln kostet mit dem Standardmodell
|
||||
`google/gemini-2.5-flash` deutlich unter 1 $. Ohne Cloud: `--no-cloud`.
|
||||
Die Bestätigung kommt von **GLM-4.6V** über OpenRouter (andere Modellfamilie als Qwen und Gemma). Dafür
|
||||
muss `OPENROUTER_API_KEY` gesetzt sein. GLM liest nur die Formeln, bei denen Qwen und Gemma schon einig
|
||||
sind. Beim Gehrke-Brückenkurs (1505 Formelbilder) waren das 967 Anfragen für zusammen etwa 0,15–0,20 $.
|
||||
Ohne Cloud (`--no-cloud`) wird nichts automatisch ersetzt, alles Einige landet im Review.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -62,15 +74,26 @@ Bei pdf2md zusätzlich die Original-PDF angeben. Dann schneidet das Programm jed
|
|||
python3 formula_img2latex.py run Output/buch.md --pdf buch.pdf
|
||||
```
|
||||
|
||||
Am Ende steht eine Übersicht, zum Beispiel:
|
||||
Das Programm arbeitet in Paketen zu 50 Formeln und meldet nach jedem Paket den Stand:
|
||||
|
||||
```text
|
||||
auto_accepted 412 ← sicher, wird ersetzt
|
||||
needs_review 380 ← bitte im Browser ansehen
|
||||
rejected_keep_image 95 ← passt nicht, bleibt Bild
|
||||
not_formula 117 ← Abbildung/Symbol
|
||||
100/1505 verarbeitet: automatisch ersetzt 68 (68%), Review 28, bleibt Bild/keine Formel 4
|
||||
```
|
||||
|
||||
Am Ende steht eine Übersicht je Status, beim Gehrke-Brückenkurs zum Beispiel:
|
||||
|
||||
```text
|
||||
auto_accepted 942 ← drei Modelle einig, wird ersetzt
|
||||
needs_review 478 ← bitte im Browser ansehen
|
||||
not_formula 93 ← laut Modellen keine Formel
|
||||
pending 539 ← Abbildungen/Symbole, nicht geprüft
|
||||
```
|
||||
|
||||
Dauer: etwa 5 Minuten je 50 Formeln, ein Buch mit 1500 Formelbildern also rund 2,5 Stunden.
|
||||
Abbrechen (Strg+C) und erneut starten ist kein Problem: Bereits gelesene Formeln werden nicht noch einmal
|
||||
gefragt, der Lauf setzt fort. `--chunk 100` ändert die Paketgröße, `--limit 200` verarbeitet nur die ersten
|
||||
200 Bilder.
|
||||
|
||||
Neben dem Buchordner entsteht ein Arbeitsordner `buch.formulas/`. Er enthält alle Ergebnisse. Lösch ihn nicht,
|
||||
solange du am Buch arbeitest.
|
||||
|
||||
|
|
@ -86,7 +109,8 @@ Der Browser öffnet `http://127.0.0.1:8765/`. Für jede Formel siehst du:
|
|||
- **Overlay:** Original und LaTeX übereinander. Mit dem Regler blendest du zwischen beiden. Springt etwas,
|
||||
stimmt etwas nicht (Exponent, Vorzeichen, Klammer).
|
||||
- **Diff:** schwarz = beide gleich, rot = nur im Original, blau = nur im LaTeX, gelb = deutliche Abweichung.
|
||||
- **LaTeX:** Text im Eingabefeld, darunter eventuell weitere Kandidaten zum Anklicken.
|
||||
- **LaTeX:** Text im Eingabefeld (die Lesart von Qwen), darunter die Lesarten der anderen Modelle zum
|
||||
Anklicken. Oben steht der Grund für das Review, z. B. „Modelle uneinig“ mit den abweichenden Lesarten.
|
||||
|
||||
Schaltflächen:
|
||||
|
||||
|
|
@ -118,7 +142,16 @@ cd ~/Python_Programs/epub2md
|
|||
python3 epub2md_merge.py output/buch --force
|
||||
```
|
||||
|
||||
Für EPUB und PDF mit Formeln gelten die Pandoc-Befehle aus der epub2md-Anleitung mit `--mathml`.
|
||||
Für EPUB und PDF mit Formeln gelten die Pandoc-Befehle aus der epub2md-Anleitung mit `--mathml`, z. B.:
|
||||
|
||||
```bash
|
||||
cd ~/Python_Programs/epub2md/output/buch
|
||||
P=~/Python_Programs/epub2md/pandoc
|
||||
pandoc buch.md --toc --mathml --lua-filter $P/callouts.lua -o buch.epub
|
||||
```
|
||||
|
||||
In deutschen Büchern schreibt `apply` Dezimalzahlen als `3{,}6`, sonst setzt LaTeX „3, 6“. Eine
|
||||
Gleichungsnummer steht als Text hinter der Formel, wie bei epub2md.
|
||||
|
||||
### Rückgängig machen
|
||||
|
||||
|
|
@ -160,14 +193,27 @@ Nützliche Optionen:
|
|||
**Das Buch wurde mit epub2md `--force` neu umgewandelt. Ist meine Arbeit weg?**
|
||||
Nein. Die Entscheidungen hängen am Inhalt der Bilder, nicht an Dateinamen. `scan`, dann `apply`.
|
||||
|
||||
**Warum landet so viel im Review?**
|
||||
Das Programm ersetzt nur, was es beweisen kann. Häufige Gründe: Das Bild ist sehr klein (Ziffern unter
|
||||
8 Pixeln). Das Buch wurde mit einem anderen Satzsystem gesetzt. Oder die Erkennung schreibt eine Formel
|
||||
typografisch anders (`\vec` statt langem Pfeil). Im Review genügt dann meist ein Blick auf das Overlay.
|
||||
**Warum landet ein Teil im Review?**
|
||||
Ersetzt wird nur, worin sich alle drei Modelle einig sind. Häufige Gründe für Review: mehrzeilige Rechnungen
|
||||
mit Ausrichtung, `\underbrace` oder Zeilenumbrüchen (die Modelle schreiben sie unterschiedlich), sehr
|
||||
kleine oder unscharfe Bilder, oder ein Modell liest ein Zeichen anders. Im Review stehen die Lesarten
|
||||
nebeneinander; oft genügt ein Blick und „LaTeX übernehmen“.
|
||||
|
||||
**Wie sicher ist „automatisch ersetzt“?**
|
||||
Gemessen an 300 Formeln mit bekannter Lösung: keine einzige falsche Formel wurde angenommen (Fehlerquote
|
||||
sehr wahrscheinlich unter 2 %). Am Gehrke-Brückenkurs wurden 62 automatisch ersetzte Formeln von Hand
|
||||
geprüft, alle korrekt. Fettdruck wird bewusst nicht geprüft: Ein fetter Vektor **v** kann als normales v
|
||||
übernommen werden.
|
||||
|
||||
**Ich will erst ein paar Formeln ansehen, bevor das ganze Buch läuft.**
|
||||
`python3 tools/vergleich.py AUSGABE` verarbeitet eine feste Stichprobe von 50 Formeln genau wie `run`
|
||||
und schreibt `vergleich/<name>/index.html`: Originalbild, die gerenderten Lesarten aller Modelle, die
|
||||
Entscheidung mit Grund und den Bildabgleich. Der Ordner `vergleich/` wird nicht ins Git übernommen.
|
||||
|
||||
**Geht die blaue Hinterlegung mancher Formeln verloren?**
|
||||
Ja. Das Bild hatte die Farbe eingebaut, LaTeX-Formeln haben keinen Hintergrund.
|
||||
|
||||
**Werden Buchinhalte ins Internet geschickt?**
|
||||
Nur mit der Cloud-Stufe, und nur die einzelnen Formelbilder samt eines kurzen Textausschnitts davor. Mit
|
||||
`--no-cloud` bleibt alles lokal.
|
||||
Nur für die dritte Lesart: die einzelnen Formelbilder, bei denen Qwen und Gemma einig sind, samt eines
|
||||
kurzen Textausschnitts um die Formel (höchstens 240 Zeichen), gehen an OpenRouter/GLM. Mit `--no-cloud` bleibt alles lokal; dann wird nichts automatisch
|
||||
ersetzt.
|
||||
|
|
|
|||
Loading…
Reference in a new issue