武道の世界で野菜犬として知られる無名の大学生
原作者: Jacky Li
電子メール: 3435673055@qq。コム完了日:2023.11.13
最終編集日:2023.11.13はじめに: 実は、それほど難しいことではありません。重要なのは、できるだけ早く投稿することです。長い間何も投稿していませんでした。
目次
プロジェクトの説明
このプロジェクトは SpringBoot と画像分類アルゴリズムに基づいてキノコを識別するための WeChat アプレットです. 撮影およびアップロードされたキノコの写真に基づいて, 訓練されたモデルは Python スクリプトを通じて呼び出されます. バックエンド処理の後, 認識結果のカテゴリとそのやっと認識精度が戻ってきました。
技術的なハイライト
-
MobileNetV2 はキノコ画像分類の特徴抽出ネットワークとして使用されており、これによりモデルが軽量になり、パラメーターの数が 60% 削減され、アクセスが高速化されます。
-
@ControllerAdvice アノテーションを通じてインターセプターを実装し、@ExceptionHandler アノテーションを使用してすべての例外をキャプチャして均一に処理します。
-
クエリ効率を向上させるために、キノコの学名フィールドにインデックスが作成されました。
1.1 全体設計
ミニ プログラムの全体的なシステム アーキテクチャと、ミニ プログラムを使用してキノコを識別するプロセスが紹介されます。
1.1.1 システムアーキテクチャ
ミニプログラムはフロントエンドとバックエンドの分離アーキテクチャを採用しており、フロントエンドはtaroフレームワーク、バックエンドはspringbootフレームワークを使用し、リクエストはnginx経由で転送されます。
1.1.2 識別プロセス
ミニ プログラムを使用してキノコを識別する場合、ミニ プログラムはバックエンドへのリクエストを開始し、バックエンドが Python スクリプトを呼び出してキノコを識別し、キノコに関する特定の情報をデータベースにクエリします。
1.2 アルゴリズムの実装
本稿では、キノコ認識アルゴリズムで使用されるデータセット、認識アルゴリズムの設計と実装、およびアルゴリズムの認識効果と改善について紹介します。
1.2.1 データセット
kaggle から入手してください。アドレス:
https://www.kaggle.com/datasets/maysee/mushrooms-classification-common-genuss-images
このデータセットには、北欧のキノコ属の最も一般的な画像フォルダーが 9 つあります。各フォルダーには、キノコ属の選択された 300 ~ 1500 枚の画像が含まれています。ラベルはフォルダーの名前です。
1.2.2 アルゴリズムの設計と実装
データセットを処理します。 tensorflow.image.decode_jpeg と tensorflow.image.resize を使用して画像を正規化します。
トレーニング: 画像とラベル (フォルダー名がラベル) をパッケージ化した後、最初の 80% をトレーニング セットとして設定し、最後の 20% を検証セットとして設定します。 tf.keras.Sequential を使用してモデルモデルを構築し、最後にトレーニングのために model.fit を呼び出します。
認識: tf.keras.Sequential を使用してモデルモデルを構築し、呼び出します
model.load_weights はトレーニングされたモデルを読み込み、最後に予測のために model.predict を呼び出します。
1.2.3 特定結果と改善点
トレーニング セットの精度: 98.53%、テスト セットの精度: 72.32%。
この結果は非常に満足のいくものではないことがわかります。最初はオーバーフィッティングが原因かと思い、ドロップアウトを増やしてみましたが、効果がないことがわかりました [Zhang 1]。
そこで、データ セット内のデータを調べたところ、次のような多くの写真がダーティ データであることがわかりました。
その後、汚れたデータを手動で削除しましたが、同時に、写真内に多くの干渉要素 (背景の花や植物など) があり、ネットワークがキノコを適切に分類できない可能性があることがわかりました。そこで、github のオープンソース ライブラリ https://github.com/nadermx/backgroundremover を使用して、データセット内のデータの背景を削除しようとしました。
背景削除スクリプト: 元の画像を走査し、os.system('backgroundremover -i "'+original_file+'" -o "'+new_file+&" を実行します。現在の画像 #39;"') コマンドを使用して画像を削除し、結果を別のファイルに保存します。
バックグラウンドに進む前に:
背景を削除した後:
最後に、ダーティ データを削除し、背景除去操作を実行した後のデータ セットをトレーニングに使用したところ、トレーニング セットの精度は 99.88%、テスト セットの精度は 81.25% でした。
1.3 アプリケーションの実装
ミニ プログラム アプリケーション データベース、バックエンド、フロントエンドの設計と実装について紹介します。
1.3.1 データベース
MySQLデータベースを使用します。システムは比較的単純なので、テーブルはマッシュルームの 1 つだけです。
キノコテーブルのフィールド: id (主キー)、name (キノコの名前)、scientific_name (学名)、species (科と属)、毒性 (毒性)、feature (特徴)、documents (ドキュメント)、img_path (画像パス)。
クエリの効率を向上させるために、scientific_name フィールドにインデックスが確立されます。
1.3.2 バックエンド
開発には springboot フレームワークを使用し、データベース対話には mybatis-plus フレームワークを使用します。
コア インターフェイス ロジック: フロント エンドから渡されたイメージをサーバー上の指定されたパスにアップロードします --> Runtime.getRuntime().exec(command) を使用して Python コマンドを実行します: pythonidentify.py <image path> ( Python スクリプトは、このパスの下の写真を認識します)--> Python スクリプトによって出力された結果 (すべてのカテゴリとその認識精度) を読み取り、並べ替えます--> サーバーにアップロードされた写真を削除します--> 戻る認識精度 上位 3 つのカテゴリ。
統合エラー処理: @ControllerAdvice アノテーションを通じてインターセプターを実装し、@ExceptionHandler(value = Exception.class) アノテーションを使用してすべての例外をキャプチャし、均一に処理します。
1.3.3 フロントエンド
Taro (React) フレームワークに基づいて開発されました。
画像のアップロード: Taro.chooseImgae API を使用して画像を選択します。選択が成功したら、Taro.uploadFile API を呼び出して画像をサーバーにアップロードします。
ページ間でオブジェクト パラメーターを渡す: 親ページは、Taro.eventCenter.trigger API を呼び出してイベントをトリガーし、パラメーターをイベントに挿入します。サブページは、Taro.eventCenter.once API を呼び出してイベントをリッスンし、パラメーターを取得します。
マッシュルームの詳細を取得する: Taro.request API を通じてバックエンド インターフェイスを呼び出して、詳細情報を取得します。
1.4 エフェクト表示
WeChat アプレット「時事」を使用してキノコを識別する効果は次のとおりです。
作者が言いたいことがある
コードが必要な場合は、ブロガーに非公開でメッセージを送信してください。ブロガーはそれを見て返信します。
ブロガーの発言が有益だと思われる場合は、[フォロー] をクリックしてサポートしてください。このような問題については引き続き更新していきます...