Lewati ke konten utama

Proyek Demo DeepSeek R1 dengan Gradio dan EasyOCR

Dalam tutorial DeepSeek-R1 ini, Anda akan mempelajari cara membangun aplikasi pemecah teka-teki matematika dengan mengintegrasikan DeepSeek-R1 dengan EasyOCR dan Gradio.
Diperbarui 28 Sep 2026  · 12 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

Dalam panduan praktik ini, saya akan menggunakan model DeepSeek-R1 untuk membangun asisten pemecah teka-teki matematika yang terintegrasi dengan EasyOCR dan Gradio.

Saya akan menjelaskan langkah demi langkah cara membangun aplikasi web fungsional yang mampu menyelesaikan beragam teka-teki matematika dan menghasilkan solusi yang membantu dengan memanfaatkan kemampuan penalaran model DeepSeek R1.

Jika Anda hanya ingin gambaran umum tentang DeepSeek-R1, saya sarankan membaca ikhtisar DeepSeek-R1 ini. Untuk melakukan fine-tuning model, saya merekomendasikan tutorial tentang fine-tuning DeepSeek-R1.

Proyek Demo DeepSeek-R1: Ikhtisar

Untuk membangun asisten pemecah teka-teki, kita akan melalui langkah-langkah berikut:

  • Menyiapkan prasyarat yang diperlukan.
  • Menginisialisasi model dengan konfigurasi yang dioptimalkan.
  • Mendefinisikan fungsionalitas inti dengan memanfaatkan kemampuan instruksi model.
  • Mengintegrasikan komponen ke dalam antarmuka Gradio yang ramah pengguna untuk interaksi yang mudah.

Langkah 1: Prasyarat

Sebelum masuk ke implementasi, pastikan kita telah memasang alat dan pustaka berikut:

  • Python 3.8+
  • PyTorch: Untuk penanganan model pembelajaran mendalam yang efisien.
  • EasyOCR: Modul Python untuk mengekstrak teks dari gambar.
  • Gradio: Untuk membuat antarmuka web yang ramah pengguna.

Jalankan perintah berikut untuk memasang dependensi yang diperlukan:

!pip install torch gradio pillow easyocr -q

Setelah dependensi di atas terpasang, jalankan perintah impor berikut:

Import torch
from PIL import Image
import easyocr
import requests
import json
import gradio as gr

Langkah 2: Menyiapkan API DeepSeek-R1

Skrip berikut menunjukkan cara berinteraksi dengan DeepSeek API untuk memperoleh respons berdasarkan prompt pengguna. Perhatikan bahwa API DeepSeek kompatibel dengan format OpenAI dan menggunakan base URL untuk permintaan API.

Anda dapat langsung memasukkan kunci API (tidak direkomendasikan karena alasan privasi), atau jika menggunakan Google Colab seperti saya, Anda dapat menyimpan kunci API menggunakan fitur Secrets. Sebagai alternatif, Anda dapat menggunakan variabel lingkungan.

# DeepSeek API configuration
DEEPSEEK_API_URL = "https://api.deepseek.com/v1/chat/completions"

# If you're using Colab and storing your key in the Secrets tab:
from google.colab import userdata
API_KEY = userdata.get('SECRET_KEY')

# If you are running this code elsewhere then, replace 'YOUR_API_KEY' with your actual DeepSeek API key. Uncomment the following line of code.
#API_KEY = 'YOUR_API_KEY' 

Pada saat artikel ini diterbitkan, layanan DeepSeek sedang mengalami beban tinggi dan kinerjanya menurun—saya juga mengalami kesulitan besar saat menjalankan kode untuk proyek ini. Harap periksa halaman status DeepSeek sebelum mencoba menjalankan kode dalam proyek ini.

Langkah 3: Merancang Fitur Inti

Sekarang API sudah siap, kita dapat mengerjakan fitur kodenya. Pada bagian ini, kita akan memproses gambar yang berisi teka-teki logika, mengekstrak teks teka-teki menggunakan OCR, menyempurnakan teksnya, dan mengirimkannya ke DeepSeek API untuk diselesaikan. Mari kita lihat dulu kodenya, lalu akan saya jelaskan.

reader = easyocr.Reader(['en'])

def solve_puzzle(image):
    """Extracts the puzzle from the image and sends it to DeepSeek for solving."""
    try:
        # 1. Save the uploaded image temporarily; EasyOCR uses file paths
        image_path = "uploaded_image.png"
        image.save(image_path)

        # 2. Extract text from the image using EasyOCR
        results = reader.readtext(image_path)
        extracted_text = " ".join([res[1] for res in results])

        # Standardize the text to avoid misinterpretation of "??" as "2?"
        extracted_text = extracted_text.replace('??', '?')
      
        if "?" not in extracted_text:
            extracted_text += "?"

        print("Extracted Text:", extracted_text)  # Debugging output

        # 3. Refine the extracted text to standardize expressions
        refined_text = extracted_text.replace('x', '*').replace('X', '*').replace('=', ' = ').strip()
        print("Refined Text:", refined_text)  # Debugging output

        # 4. Compose the user message with concise instructions
        puzzle_prompt = (
            f"You are an AI specialized in solving puzzles. Analyze the following, identify hidden patterns or rules, and provide the missing value with step-by-step reasoning in text format. Do not return an answer in Latex."
            f"\nPuzzle:\n{refined_text}\n"
            "Format your response strictly as follows:\n"
            "1. **Given Equation**:\n   - (original equations)\n"
            "2. **Pattern Identified**:\n   (explain the hidden logic)\n"
            "3. **Step-by-step Calculation**:\n   - For (input values):\n     (calculation and result)\n"
            "4. **Final Answer**:\n     (Answer = X)"
        )

        messages = [
            {"role": "user", "content": puzzle_prompt}
        ]

        # 5. Optimized API request for faster response
        data = {
            "model": "deepseek-reasoner",
            "messages": messages,
            "temperature": 0,  
            "max_tokens": 100  
        }

        headers = {
            "Authorization": f"Bearer {API_KEY}",
            "Content-Type": "application/json"
        }

        # 6. Send the request to DeepSeek with a timeout
        response = requests.post(DEEPSEEK_API_URL, headers=headers, json=data, timeout=15)

        # 7. Check the result
        if response.status_code == 200:
            try:
                json_resp = response.json()
                return json_resp.get("choices", [{}])[0].get("message", {}).get("content", "Error: No response content.").strip()
            except json.JSONDecodeError:
                return "Error: Invalid JSON response from DeepSeek API."
        else:
            return f"Error: DeepSeek API failed with status code {response.status_code}, Response: {response.text}"
    except requests.exceptions.Timeout:
        return "Error: DeepSeek API request timed out. Please try again."
    except Exception as e:
        return f"Error: {str(e)}"

Fungsi solve_puzzle() memproses gambar yang berisi teka-teki logika dan menyelesaikannya menggunakan OCR dan model R1. Alurnya sebagai berikut:

  1. Inisialisasi EasyOCR: Kita memulai dengan menginisialisasi pembaca EasyOCR dalam bahasa Inggris.
  2. Pemrosesan gambar: Gambar yang diunggah disimpan sementara dan diproses menggunakan EasyOCR untuk mengekstrak teks.
  3. Penyempurnaan teks: Teks yang diekstrak distandardisasi untuk memastikan konsistensi dan akurasi.
  4. Penyusunan kueri: Kueri terstruktur dibuat, mencakup teks teka-teki yang telah disempurnakan dan instruksi khusus untuk penyelesaian.
  5. Interaksi API: Kueri dikirim ke DeepSeek API, yang menganalisis dan menyelesaikan teka-teki. Pastikan menggunakan model deepseek-reasoner untuk memakai DeepSeek-R1. Jika ingin menggunakan DeepSeek-V3, gunakan deepseek-chat. Dan selalu perhatikan harga, jadi periksa halaman harga untuk informasi terbaru.
  6. Penanganan respons: Respons API diproses untuk mengekstrak dan mengembalikan solusi atau pesan kesalahan yang sesuai.
  7. Penanganan galat: Fungsi ini juga menangani masalah seperti batas waktu habis atau pengecualian tak terduga, memastikan operasi yang andal.

Pipelinenya menggabungkan OCR untuk ekstraksi teks dan DeepSeek API untuk pemecahan teka-teki yang cerdas.

Langkah 4: Membuat Antarmuka Gradio

Gradio memungkinkan kita membuat antarmuka web interaktif untuk aplikasi kita. Cuplikan kode berikut membuat antarmuka web Gradio yang ramah pengguna untuk fungsi solve_puzzle(). Antarmuka Gradio menerima masukan pengguna dan mengirimkannya ke model untuk divalidasi.

interface = gr.Interface(
    fn=solve_puzzle,
    inputs=gr.Image(type="pil"),
    outputs="text",
    title="Logic Puzzle Solver with EasyOCR & DeepSeek",
    description="Upload an image of a logic puzzle, and the model will solve it for you."
)
interface.launch(debug=True)

Pengaturan di atas mencakup tiga komponen:

  • Input: Komponen gr.Image tempat pengguna dapat mengunggah gambar.
  • Output: Komponen text untuk menampilkan jawaban dari DeepSeek-R1.
  • Antarmuka: Fungsi gr.Interface() mengaitkan input dan output, lalu meluncurkan aplikasi web untuk interaksi pengguna.

Langkah 5: Uji Aplikasinya

Mari uji aplikasi kita dengan teka-teki yang melibatkan matematika dan logika.

Jika Anda melihat baris pertama, Anda akan menemukan 1 + 4 = 5, dan Anda mungkin mengatakan ini penjumlahan sederhana. Namun pada baris kedua ada 2 + 5 = 12, lalu 3 + 6 = 21. Bisakah Anda menemukan polanya dan menyelesaikan 8 + 11 = ?

Jika Anda melihat sisi kanan antarmuka Gradio, Anda akan melihat bahwa aplikasi Puzzle Solver telah mengidentifikasi polanya:

aplikasi deepseek-r1 dengan gradio

Kesimpulan

Dalam tutorial ini, kita membangun asisten pemecah teka-teki matematika menggunakan DeepSeek R1 yang dikombinasikan dengan OCR dan Gradio untuk menyelesaikan teka-teki matematika. Untuk mengikuti perkembangan terbaru di bidang AI, saya merekomendasikan blog berikut:


Aashi Dutt's photo
Author
Aashi Dutt
LinkedIn
Twitter

Saya adalah Google Developers Expert di ML (Gen AI), Kaggle 3x Expert, dan Women Techmakers Ambassador dengan pengalaman lebih dari 3 tahun di bidang teknologi. Saya ikut mendirikan startup health-tech pada 2020 dan sedang menempuh studi magister ilmu komputer di Georgia Tech dengan spesialisasi machine learning.

Topik
Kecerdasan Buatan
Large Language Models

Pelajari AI dengan kursus-kursus ini!

Kursus

Retrieval Augmented Generation (RAG) dengan LangChain

3 jam
21.3K
Pelajari metode mutakhir untuk mengintegrasikan data eksternal dengan LLM menggunakan Retrieval Augmented Generation (RAG) dengan LangChain.
Lihat DetailRight Arrow
Mulai Kursus
Lihat SelengkapnyaRight Arrow
Terkait

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

Lihat SelengkapnyaLihat Selengkapnya