Neuro-coopパート2:写真を投稿するボットについて

画像



鶏小屋のイベントをリアルタイムで報告するための最も簡単な作業ソリューション。 また、十分な知識がなくても、タスクを引き受けて新しいことを学ぶ必要がある理由についてもう少しおしゃべりします。



ニューロチキンハウスに関する記事

ネタバレ見出し
  1. ニューラルネットワークでのトレーニングの概要
  2. 鶏を監視するための鉄、ソフトウェア、および構成
  3. ニワトリの生涯のイベントを投稿するボット -ニューラルネットワークなし
  4. データセットのレイアウト
  5. 鶏小屋での鶏の認識の作業モデル
  6. 結果-鶏小屋で鶏を認識する作業用ボット








ママ、メッセンジャー、ボット、鶏



最初に、前回の記事の Pythonスクリプトについて少し説明します。 スクリプトに変更が加えられました。たとえば、輪郭を完全に破棄し、モーションカウンターに関連するいくつかのバグを修正しました。これは無視され、アプレットの時間に関連していました。 ただし、これらはすべてシンプルで、必要に応じて簡単に修正できます。







このスクリプトの実行方法については前に述べました。 永遠のsshセッションの助けを借りてこれを行いましたが、ここに問題があります。私はラップトップを持って出かけなければなりません。現時点ではsshセッションをサポートできません。 明らかな解決策は、バックグラウンドでデーモンを作成し、独立して動作させることです。







プロセスをバックグラウンドに送信するだけでは不十分であり、セッションが終了すると、プロセスも終了することが判明しました。 本格的な悪魔を作成するには、プロセスを端末から解放する必要があります。 これを行うにはいくつかの方法がありますが、 ここではいくつかの方法と追加情報を示します。







2番目の問題は、仮想環境にありました。 スクリプトを機能させるには、仮想環境のpythonが必要でした。 ソリューションはめちゃくちゃ簡単であることが判明し、呼び出し時に仮想環境へのパスを登録するだけです。 その結果、プロセスをデーモンにするには、次のように実行するのに十分であることが判明しました。







/home/sshuser/.virtualenvs/cv/bin/python3 /home/sshuser/chickencoop/pi_surveillance_mod2.py --conf /home/sshuser/chickencoop/conf.json </dev/null &>/dev/null &
      
      





さて、鶏小屋の雌鶏のリアルタイム写真を母にスパムするボットについて。 分析と認識はまだ行われておらず、ボットはモーション検出で写真を投稿するだけです。 そして、カメラはまだ曲がって垂れ下がっており、鶏の頭の代わりに、硬い尾が観察されます。







ボットは単純でシンプルです。 ファイルが作成されると、サーバーの拡張機能とホームディレクトリがサーバー上でチェックされ、成功すると、メッセンジャーAPIでリクエストを実行し(写真をチャネルに送信)、ログを通常のテキストファイルに書き込みます(応答を解析してデータベースに入れることができます)しかし、必要はありません)。







Telegramでこのようなボットを作成するには、次のものが必要です。







  1. チャンネルを作成する
  2. BotFatherを使用してテレグラムでボットを作成するには(これはテレグラムのボットでもあります)、メッセージと写真を投稿するにはボットトークンが必要です。
  3. ボット用のスクリプトを作成し、悪魔化します。


最初の2つのポイントはすべてシンプルで、3番目のポイントも退屈しやすいです。これは、電報に十分に文書化されたAPIがあり、必要なメソッドが1つだけだからです。







ファイル作成イベントを追跡するには、bashスクリプトを使用します; inotify-toolsはイベントをリッスンします。 送信スクリプトはすぐには呼び出されませんが、10秒待ってから呼び出されます。 これは、作成後しばらくの間ファイルがダウンロードされ、鶏小屋の優れたインターネット速度を考慮して、10秒であることが実験的に確立されたためです。







 #!/bin/sh DIR="/your/directory" inotifywait -m -r -e create --format '%w%f' "$DIR" | while read f do PARDIR="$(dirname $f)" PARFOLD="$(basename $PARDIR)" FBASENAME="$(basename $f)" FILEEXT="${FBASENAME##*.}" EXT="jpg" FOLD="resized" if [ $FILEEXT = $EXT ]; then if [ $PARFOLD = $FOLD ]; then # sleep til file is uploaded sleep 10 python3 /your/directory/bot_request.py --params /your/directory/params_public.json -f $f fi fi done
      
      





bot_request.py:







 import requests import json import datetime import argparse import warnings # construct the argument parser and parse the arguments ap = argparse.ArgumentParser() ap.add_argument("-p", "--params", required=True, help="params json. chat, token") ap.add_argument("-f", "--file", required=True, help="file path") args = vars(ap.parse_args()) # filter warnings, load the configuration and check if we are going to use server warnings.filterwarnings("ignore") params = json.load(open(args["params"])) # set url and post data payload = {"chat_id": params["chat"], "caption": "motion detected {ts}".format(ts=datetime.datetime.now().strftime("%A-%d-%B-%Y-%I:%M:%S%p"))} url = "https://api.telegram.org/bot" + params["token"] + "/sendPhoto" files = {'photo': open(args["file"], "rb")} # post request request = requests.post(url, files=files, data=payload) # log the output with open("/path/to/your/botlogs/{dt}-{chat}.txt".format(dt=datetime.datetime.now().strftime("%d-%B-%Y"), chat=params["type"]), "a") as logfile: logfile.write("\n" + request.text)
      
      





params_public.json:







 { "chat": "@your_chat", "token": "your_tocken", "type": "public" }
      
      





実際、それがすべてであり、最も簡単で最も機能するソリューションが用意されています。







画像



正直に言って、正直:自分が愚かだと思う理由

ちょっとおしゃべり。 誰かがしつこいことを考えるだろう-先に進み、あなたがやりたいことをしてください。 記事のこの部分の主なメッセージは、誰かが少なくともあなたが答えを探す必要がある方向を示唆せずにあなたを批判するなら、落胆しないことです。 いいえ、プロトタイプを作成して問題を解決するには、何も知らなくても経験を積むことができます。 人間はすべてを知ることはできません。 間違っていない人がいて、天からの啓示の形で知識が伝わる人はいないと思います。







画像 誰が彼らに真実をささやいているのか分かりません...

これについて私がどう思うか簡単に説明します。 ただ、私は自分の意見を共有しているだけであり、誰かを誰にも押し付けることなく、誰も彼を額面通りに連れて行くように促していないことを付け加えなければなりません。







私は開発者ではないという事実から始めます。 たぶん私はいつか1人になるでしょう。 私は開発者ではないため、ほとんどの場合、プログラミング言語は、開発、サポート、状態追跡ツール、レポート、分析の多くの反復を経る堅牢なシステムを実装する必要のない問題のプロトタイピングと解決のためのツールとしてのみ使用します。など 一般的に、アーキテクチャについて考える必要はほとんどありません。 最も単純な例:特定のデータセットを消去する必要があります。 Pythonでこれを行う方が簡単です。一度実行して、コードをゴミ箱に捨てます。







そのため、コードを書くとき、私はいつもそれを公開する気にはなりません。 私は、キヤノンによるとではなく、何か間違ったことをしたことを知っているからです。 そして、最も重要なことは、批判があることを常に知っていることです。 それを行う方法を知っている人が少なくとも1人はいますが、解決策を提供せず、理解の手がかりを与えず、カテゴリから何かを言います。「あなたはすべてが間違っている、すべてがうまくいきません、あなたは価値のない人です(そして私はダルタニャン、しかし、私は理由を言いません、そして、私はあなたが不器用に書かれた記事と引き換えに何も提供しません、私はしたくないので。」







実際に戦いに巻き込まれた私のコードから、データベースのストアドプロシージャと会社への分析レポートの配布システムのみを区別して区別することができます。 それはphpで書かれており、アーキテクチャの似たようなものがありました。







誇らしげなハヤブサが記事php primatesを閉じ、その中の低傾斜の額に傷を付けたので(この時点で、彼らは記事も閉じました)、続行します。







ドキュメント、記事、書籍を読む必要がありますが、これは実際の問題を解決しないと役に立ちません。 そして、キヤノンに従って各問題を解決すれば、実際にプロトタイプを作成することさえできなくなります。 真剣に。 決して。







複雑なシステムはすべて単純なシステムから始まったことを忘れないでください。 そして、他の何かを導入したとき、彼らはそれを導入した理由を知っていました。 これらの技術革新ですでに複雑になりすぎて規模が大きくなっているシステムを研究しようとしている場合、なぜこの現象やプロセス、機能がシステムに存在するのかわからないことがよくあります。 これらはブラックボックスであり、彼らの研究は人道的アイテムよりもひどい詰め込みに似ていることがあります。 そして、すべてあなたが理由を知らないからです。 ロジックは表示されません。







あなたが愚かだと言われても、あなたは何を理解していない、あなたはこの素朴な精神を理解していない、すべてがそこに明確である(私と呼ぶように、聖人と預言者)、心配しないでください。 あなたは預言者ではありません。このシステムを書いた人々の頭の中に何が入ったのか、彼らがそこに入れた松葉杖(機能的な機能の名の下に規範から離れる)とその理由を知ることはできません。 文書がまだない場合(適切な文書であり、よくそのような方法があるという事実についての3つの言葉ではない)、よくあることですが、預言者が応答してあなたに注ぐだらけのバケツを通過せずに何かを理解することは一般に不可能です(有用な情報ではなく)質問ごとに。 理由はわかりませんが、ITの何らかの理由でこれはまれな例外を除いてルールです。







ニューロチキンハウスは、プロトタイプとして生まれたシステムの例であり、完全なシステムおよび完全な製品になることはありません。 これは単なる趣味であり、収益化されたアプリケーションを持たない実際のタスクに関するトレーニングです。 スケーリングしません。







私はPythonを知りません。 私はこの場合に使用し、途中で見つけます。 同様に、bashスクリプトの書き方もわかりません。 しかし、コードを書く必要がないというコメントを真剣に受けとめれば、このようなことをする必要はなく、何も学ぶことはありません。












All Articles