サイトアイコン アマチュア無線局JS2IIU

【Streamlit】バーコードから書籍情報を表示する

こんにちは、JS2IIUです。
Streamlitは、Pythonで記述したコードからインタラクティブなWebアプリケーションを簡単に作成できるフレームワークです。今回は、Streamlitを使って、Webカメラで撮影した映像からバーコードを読み取り、ISBNを元に書籍の表示を表示するアプリケーションを作成してみましょう。今回もよろしくお願いします。

書籍の表示を取得するためのAPI

このアプリケーションでは、国立国会図書館サーチが提供する書影APIを利用します。このAPIにISBNコードを指定することで、書籍の表示画像を取得できます。登録不要で使えます。

書影API: https://ndlsearch.ndl.go.jp/help/api/thumbnail

国立国会図書館サーチが提供する書影API | NDLサーチ | 国立国会図書館

サンプルコード

サンプルコードは以下の記事で作成したものをベースにしています。

Python
import requests
import cv2
import streamlit as st

from PIL import Image
from io import BytesIO

st.title('Webcam Barcode Reader')

# カメラ映像を配置するプレースホルダーを作成
placeholder = st.empty()

# カメラ番号は環境に合わせて調整してください (通常は0)
cap = cv2.VideoCapture(0)  

# バーコードリーダーを作成
barcode_reader = cv2.barcode.BarcodeDetector()

# 検出されたバーコード情報を格納する集合
detected_codes = set()

while True:
    ret, frame = cap.read()
    if not ret:
        break

    # OpenCVはBGRフォーマットなので、RGBに変換
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

    # バーコード情報を取得
    try:
        # バーコードを検出
        ok, decoded_info, decoded_type, corners = barcode_reader.detectAndDecode(frame)
    except ValueError:
        decoded_info, decoded_type, corners = barcode_reader.detectAndDecode(frame)
        ok = bool(decoded_info)


    # st.write(f"decoded_info: {decoded_info}")  # デバッグ出力
    if len(decoded_info) > 2:
        detected_codes.add(f'{decoded_info}')

    # `st.image()`でプレースホルダーに画像を表示
    placeholder.image(frame, channels="RGB")

    # バーコードが検出されたらループを終了
    if len(detected_codes) >= 2:
        l = list(detected_codes)
        st.header(f'Barcodes: {l[0]}, {l[1]}')

        for code in detected_codes:
            isbn_code = None
            if '9784' in code:
                isbn_code = code

        if isbn_code:
            url = f'https://ndlsearch.ndl.go.jp/thumbnail/{isbn_code}.jpg'
            res = requests.get(url)
            image = Image.open(BytesIO(res.content))
            st.image(image, caption="取得した画像")

        break

cap.release()

お試しで表示させている書籍のPRです。面白い切り口で楽しく読めました。「なぜ働いていると本が読めなくなるのか」三宅著。

コードの解説

  1. ライブラリのインポート
  1. タイトルの設定
  1. カメラの設定
  1. バーコードリーダーの作成
  1. バーコード情報の初期化
  1. メインループ
  1. 後処理

参考になるWebサイト

最後に、書籍のPRです。

最新のOpenAIのチャットAPIの使い方もしっかりと解説されている良書です。2024年11月初版発行、「LangChainとLangGraphによるRAG・AIエージェント[実践]入門」西見、吉田、大嶋著。

最後まで読んでいただきありがとうございます。73

モバイルバージョンを終了