Tujuan dari proyek ini adalah untuk menciptakan sistem berbasis pembelajaran yang mengambil gambar rumus matematika dan mengembalikan kode LaTeX yang sesuai.
Untuk menjalankan model, Anda memerlukan Python 3.7+
Jika Anda belum menginstal PyTorch. Ikuti instruksi mereka di sini.
Instal paket pix2tex
:
pip install "pix2tex[gui]"
Pos pemeriksaan model akan diunduh secara otomatis.
Ada tiga cara untuk mendapatkan prediksi dari suatu gambar.
Anda dapat menggunakan alat baris perintah dengan memanggil pix2tex
. Di sini Anda dapat mengurai gambar yang sudah ada dari disk dan gambar di clipboard Anda.
Berkat @katie-lim, Anda dapat menggunakan antarmuka pengguna yang bagus sebagai cara cepat untuk mendapatkan prediksi model. Panggil saja GUI dengan latexocr
. Dari sini Anda dapat mengambil tangkapan layar dan kode lateks yang diprediksi dirender menggunakan MathJax dan disalin ke clipboard Anda.
Di linux, dimungkinkan untuk menggunakan GUI dengan gnome-screenshot
(yang dilengkapi dengan dukungan beberapa monitor) jika gnome-screenshot
telah diinstal sebelumnya. Untuk Wayland, grim
dan slurp
akan digunakan jika keduanya tersedia. Perhatikan bahwa gnome-screenshot
tidak kompatibel dengan kompositor Wayland berbasis wlroots. Karena gnome-screenshot
akan lebih disukai bila tersedia, Anda mungkin harus mengatur variabel lingkungan SCREENSHOT_TOOL
menjadi grim
dalam kasus ini (nilai lain yang tersedia adalah gnome-screenshot
dan pil
).
Jika model tidak yakin dengan isi gambar, model mungkin akan menghasilkan prediksi yang berbeda setiap kali Anda mengeklik "Coba Lagi". Dengan parameter temperature
Anda dapat mengontrol perilaku ini (suhu rendah akan menghasilkan hasil yang sama).
Anda dapat menggunakan API. Ini memiliki ketergantungan tambahan. Instal melalui pip install -U "pix2tex[api]"
dan jalankan
python -m pix2tex.api.menjalankan
untuk memulai demo Streamlit yang terhubung ke API di port 8502. Ada juga gambar buruh pelabuhan yang tersedia untuk API: https://hub.docker.com/r/lukasblecher/pix2tex
docker pull lukasblecher/pix2tex:api docker run --rm -p 8502:8502 lukasblecher/pix2tex:api
Untuk juga menjalankan demo streamlit
docker run --rm -it -p 8501:8501 --entrypoint python lukasblecher/pix2tex:api pix2tex/api/run.py
dan navigasikan ke http://localhost:8501/
Gunakan dari dalam Python
dari PIL impor Gambardari pix2tex.cli impor LatexOCRimg = Gambar.open('path/to/image.png')model = LatexOCR()print(model(img))
Model ini berfungsi paling baik dengan gambar dengan resolusi lebih kecil. Itu sebabnya saya menambahkan langkah prapemrosesan di mana jaringan saraf lain memprediksi resolusi optimal gambar masukan. Model ini akan secara otomatis mengubah ukuran gambar khusus agar menyerupai data pelatihan dan dengan demikian meningkatkan kinerja gambar yang ditemukan di alam liar. Namun tetap saja belum sempurna dan mungkin tidak mampu menangani gambar berukuran besar secara optimal, jadi jangan memperbesar sepenuhnya sebelum mengambil gambar.
Selalu periksa kembali hasilnya dengan cermat. Anda bisa mencoba mengulangi prediksi tersebut dengan resolusi lain jika jawabannya salah.
Ingin menggunakan paket tersebut?
Saya sedang mencoba mengkompilasi dokumentasi sekarang.
Kunjungi di sini: https://pix2tex.readthedocs.io/
Instal beberapa dependensi pip install "pix2tex[train]"
.
Pertama kita perlu menggabungkan gambar-gambar tersebut dengan label kebenaran dasarnya. Saya menulis kelas kumpulan data (yang perlu ditingkatkan lebih lanjut) yang menyimpan jalur relatif ke gambar dengan kode LaTeX yang digunakan untuk merendernya. Untuk menghasilkan file acar kumpulan data, jalankan
python -m pix2tex.dataset.dataset --equations path_to_textfile --images path_to_images --out dataset.pkl
Untuk menggunakan tokenizer Anda sendiri, teruskan melalui --tokenizer
(Lihat di bawah).
Anda juga dapat menemukan data pelatihan yang saya hasilkan di Google Drive (formula.zip - gambar, math.txt - label). Ulangi langkah tersebut untuk validasi dan uji data. Semua menggunakan file teks label yang sama.
Edit entri data
(dan valdata
) di file konfigurasi ke file .pkl
yang baru dibuat. Ubah hyperparameter lainnya jika Anda mau. Lihat pix2tex/model/settings/config.yaml
untuk templat.
Sekarang untuk latihan sebenarnya
python -m pix2tex.train --config path_to_config_file
Jika Anda ingin menggunakan data Anda sendiri, Anda mungkin tertarik untuk membuat tokenizer Anda sendiri
python -m pix2tex.dataset.dataset --equations path_to_textfile --vocab-size 8000 --out tokenizer.json
Jangan lupa untuk memperbarui jalur ke tokenizer di file konfigurasi dan atur num_tokens
ke ukuran kosakata Anda.
Model ini terdiri dari encoder ViT [1] dengan tulang punggung ResNet dan decoder Transformer [2].
skor BLEU | jarak edit bernorma | akurasi token |
---|---|---|
0,88 | 0,10 | 0,60 |
Kami memerlukan data berpasangan agar jaringan dapat belajar. Untungnya ada banyak kode LaTeX di internet, misalnya wikipedia, arXiv. Kami juga menggunakan rumus dari dataset im2latex-100k [3]. Semuanya dapat ditemukan di sini
Untuk merender matematika dalam banyak font berbeda, kami menggunakan XeLaTeX, menghasilkan PDF, dan terakhir mengonversinya menjadi PNG. Untuk langkah terakhir kita perlu menggunakan beberapa alat pihak ketiga:
XeLaTeX
ImageMagick dengan Ghostscript. (untuk mengonversi pdf ke png)
Node.js untuk menjalankan KaTeX (untuk normalisasi kode Lateks)
Python 3.7+ & dependensi (ditentukan di setup.py
)
Matematika Modern Latin, GFSNeohellenicMath.otf, Matematika Asana, Matematika XITS, Matematika Cambria
menambahkan lebih banyak metrik evaluasi
membuat GUI
tambahkan pencarian sinar
mendukung rumus tulisan tangan (sudah selesai, lihat buku catatan colab pelatihan)
mengurangi ukuran model (distilasi)
menemukan hyperparameter yang optimal
mengubah struktur model
memperbaiki pengikisan data dan mengikis lebih banyak data
lacak modelnya (#2)
Kontribusi dalam bentuk apa pun dipersilakan.
Kode diambil dan dimodifikasi dari lucidrains, rwightman, im2markup, arxiv_leaks, pkra: Mathjax, harupy: snipping tool
[1] Sebuah Gambar Bernilai 16x16 Kata
[2] Hanya Perhatian yang Anda Butuhkan
[3] Pembuatan Gambar-ke-Markup dengan Perhatian Kasar hingga Halus