見出し画像

【python&AI】本棚を丸ごとサーチする究極せどりツールを作りたい!

結構昔の話ですがbookoffやhardoffが全盛期の頃、ジャンク品を買ってきて綺麗にリペアしてヤフオクで販売するみたいな小遣い稼ぎをやっていた事がありました。(今でも古物商の許可持ってます)

当時はせどりなんて言葉も一般的ではなくネットの中古屋と自称してゲームや書籍をメインに仕入れていたんですが、スマホやせどりツールが流通する前だったのでISBN番号からシコシコ商品情報を調べていました。

この作業は時間もかかるし面倒くさかったので「見る」だけでamazon価格が浮かび上がってくるようなメガネがあれば無限にお金を稼げるのにな、と妄想しながら作業したもんです。

あれから10年以上経った自分の脳みそはプログラミングという概念を習得し、ツールやアプリを自作&販売できるようになりました。今なら作れるんじゃないのか??当時の自分が妄想していた夢のせどりメガネをっ!

記事が面白かったらフォロー&♥よろしくお願いしますm(_ _)m


目標

メガネをかけて本棚を見るだけで商品価格やランキング情報が表示される、スマートグラス用アプリ,プラグインを作りたい。

が、触った事もないスマートグラス用のアプリ開発はいきなりは無理なので、スマホで撮影した本棚の画像から書籍情報を読み取ってamazon価格・ランキング情報を表示するスマホアプリをテストで作ってみる。

何が必要が調べる

とりあえずサンプルで自分の本棚の一部をスマホで撮影し、頭の中の完成形のイメージを書き込んでみる。

これを自動でこんな風にしたい、数字は適当だけども。

まず思い付くのは背表紙を書籍単位で判別する必要がありそう。さらに判別した背表紙のエリア内のテキストを読み取ってデータ化して、amazonの商品価格・ランキングを検索する、みたいな感じ??

まとめると、
①本棚から背表紙の輪郭を検出
②検出したエリア内の文字を認識
③文字データからamazon商品価格とランキングを取得

こうか。結構出来そうな気がして来た。

後は取得した商品データを画像に描画する処理とかもあるけど、そんなもんはPillowとかpenCVで何とでもなるので一旦無視。画像から商品情報を自動で取得するまでをミッションとしよう。

それぞれの機能をどうやったら実現できるかもうちょっと深掘りしてみる。

①本棚から背表紙の輪郭を検出

pythonで画像内の輪郭を検出する方法はいくつかあって、

  1. 画像処理による輪郭・エッジの検出

  2. エネルギー最小化ベースの輪郭形成

  3. 深層学習ベースの推論

ここら辺が自分の脳みそで理解できる理論なんだけど、2については実際にスクリプトを書くとかの実用までやった事がないので、選択肢としては実質1 or 3。

んでエッジ検出って狙った物体のみ検出するのが難しくて本棚/蛍光灯/インデックス/文字/木目などなど、画像に写っているすべてを対象に見境なしに反応しちゃう。

#エッジ検出
import cv2
import numpy as np
import matplotlib.pyplot as plt
    
def detect_contours_with_darkened_image(image_path):
    # 画像を読み込む
    image = cv2.imread(image_path)
    # グレースケールに変換
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    # ガウシアンブラーを適用してノイズを低減
    blurred = cv2.GaussianBlur(gray, (5, 5), 0)
    # エッジを検出
    edged = cv2.Canny(blurred, 50, 150)
    # 輪郭を検出
    contours, _ = cv2.findContours(edged.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    
    # 画像の明度を調整して暗くする
    darkened = cv2.convertScaleAbs(image, alpha=0.5, beta=0)
    
    # 輪郭を暗くした画像に描画
    cv2.drawContours(darkened, contours, -1, (0, 255, 0), 2)
    
    # 結果を表示
    plt.figure(figsize=(10,10))
    plt.imshow(cv2.cvtColor(darkened, cv2.COLOR_BGR2RGB))
    plt.axis('off')
    plt.show()

# 画像のパスを指定して関数を呼び出し
image_path = "img_path.jpg"
detect_contours_with_darkened_image(image_path)

背表紙のデザインにも反応しちゃうので輪郭だけを抽出するには、条件付けがきっとかなり面倒くさい。

今回は本棚の中に収まってる書籍のみ検出して欲しいので、輪郭検出ってよりも物体検知の方が目的に近いのかもしれない。画像の中に写っている物体を分類して書籍と判定された物の位置情報をレスポンスとして取得できればいけそうな気がする。

実際の使用を想定すると高速かつ高精度が望ましいので、調べてみると「yolo」というアルゴリズムが良さそうな感じ。pythonのライブラリだけでさくっと出来そうだしこれでいいか。無料だし。

②検出したエリア内の文字を認識

文字起こし系は以前ちょこっとやった事があるのでいいやつ知っておりまして、google vision APIが精度・速度・料金いずれもハイパフォーマンスだった。

他にもOCR的なサービスが出てきてるかもしれないけど、google vision API以上のパフォーマンスで値段も安い物があるとは考えにくいのでとりあえずこれで決めちゃう。

③文字データからamazon商品価格とランキングを取得

以前vtuberの切り抜き動画研究をやってた時にアマゾンアソシエイトに通ったのでPAAPIが使える、画像から検出した書籍情報を元にPAAPI経由で検索して価格とかのデータを取ってくればいいかなと。

仕様

  • 言語はとりあえずのpython

  • 物体検知はyolo

  • 文字認識はgoogle cloud vision API

  • 価格情報はPAAPI

  • yolo使うのにGPUサーバーが必要

とりあえずこんな感じかな、無料で使えるオープンソースだけでせどりカメラのシステムは構成できそう。ただしyoloを動かすのに実際にはGPUが必要なのでここだけ安く使えるサーバーを探すひつようがありそう。

せどりツール開発マガジン

最強せどりツールの完成までの道のりは下記のマガジンにまとめていきますので、良かったら読んでみて下さい('ω')ノ

まとめ

よーし、具体的な仕様が決まった所で今回はここまで。

次回はyoloの物体検知テストをやってみて、本棚画像から背表紙だけを検出して切り出せるか試してみよう。


この記事が面白かったら♡・フォローよろしくお願いしますm(_ _)m

下記のメンバーシップでは日々の活動報告・裏話なんかも掲示板で更新しています、一部の有料記事も読めちゃって初月無料ですので良かったらお試しを!

よろしければサポートお願いします、頂いたサポートは活動費として使用させて頂きより有意義な記事を書けるように頑張ります!