[授業4週目12日目]機械学習-3


1.学習内容


昨日に続いて、今日もJupeterコンピュータプログラムを使って自分のpcにフォルダを作成し、Pythonファイルを作成し、マイクロソフト社が開発したマシンを使ってAPIを学ぶ方法を学びました.


無条件にms APIを使用するには、パケットをインポートするときにurlとトークン鍵を同時に使用する必要があります.
もちろんurlとトークンキーはmsazureクラウド上にアカウントがあり、クラウド上に認知サービスアカウントを作成する必要があります.クラウド内の複数のサービスは「リソース」とも呼ばれ、その多くのリソースを組み合わせて「リソースグループ」と呼ばれます.ここでは、アカウントを作成するように、リソースグループを作成します.多くのリソースの中から、画像を使用して作成された「コンピュータビジュアル」リソースを選択すればよい.無料もありますが、制限があり、1ヶ月に5000回程度利用できるので利用料金が良いです.
これにより、プログラムが終了すると、urlとトークンキーを個人アカウントで取得でき、以下に示すように配置すると、リソースを使用できます.
analyze_url = vision_base_url + 'analyze'
次に、分析するurlを任意の名前として宣言し、リソースurl+「分析」を入力します.
このようにしてこそ、低analys urlを書き込み、分析する画像urlを入れることができるからです.

次に、人と車が混在する画像(分析対象の画像を見つける)を最大限に見つけ、画像アドレスを入力します.
そして、イメージアドレスの取得を求める宣言(反応)を書き、イメージを開くことができる小包命令文を書き、カッコで包んだ後、カッコで包んだ後、カッコでイメージを包みます.毎回長い文を書くことができないので、簡単に「image」と入力するだけでコード実行を宣言できます.


宣言が正しい場合は、「image」と入力して画像を出力します.
画像がロードされている場合は、画像の分析の番です.変数を宣言してazureリソースを読み込みます.以下はほぼメニューなどで、変数名以外は固定して入力します.

ヘッダーの「」セクションの後に、キー値を指定します.
paramsはパラメータを設定するためのもので、後で入力する値を書けばいいです.カテゴリ、説明、色をインポートすることにしました.
インポートした画像urlをdataに書き込めばよい.
インポートする情報が予め設定されており、呼び出すだけで済みます.
ここで、宣言変数が「response」である場合は、post方式で要求を記入し、要求に必要なアドレスを取得する必要があります.その上部にはリソースアドレスである「analys url」と宣言されたアドレスがあり、インポートできます.次に、上記で宣言した変数を使用して、タイトル部分、パラメータ、およびデータをインポートします.
response = requests.post(analyze_url, headers=headers, params=params,
                        json=data)
次のエラーが発生していない場合は、実行します.実行結果を得るためには,まずjsonを理解する必要がある.

低応答結果をjsonで呼び出す変数を入力し、正しいかどうかを確認します.

では、リソース分析の結果を以下に示すと、成功します.

複数の階層出力に分割されていることがわかります.[]<-複数の配列が含まれていることを示します.
ただし、1行目のタイトルのみを表示したい場合は、入力コマンドは、タイトルの順序で最初の0を出力として入力します.
analysis['description']['captions'][0]['text']

このように出力します.
次は、ある写真の要素が何なのかを分析するObject Detectionです
Object Detectionは、特定の要素の場所を検索します.
例えばこうです.

リソースに書き込むオブジェクト検出の変数を宣言します.
次に、解析する以上の画像と他の画像のurlを書き込み、同様に、画像を読み出すパケット変数を宣言した後、変数を入力してコマンドが正しく出力されているかどうかを確認します.


次に、ヘッダとデータを取得します.(ここではパラメータは不要で、2つだけ必要です.)

先ほどのように、応答後に変数(インポートするurlとハッシュとデータ)を宣言し、結果値もjsonの変数として宣言し、変数を入力して出力します.

その結果値に基づいて、該当するものに枠線を引いて、文字を書こうとすると、次のようにimportして、それから線を引いて、写真に文字を表示することができます.

その前に、先ほどの結果値の「ractangle」値に注意する必要があります.
ractangleとは,オブジェクトが中央から矩形形状で認識される値を指す.
ここでは、写真上で矩形線でオブジェクトを識別するには、まずxy値が交差する値と、x軸から横方向の長さ、y軸から縦方向の長さの高さの座標値の2つの点しか必要ありません.
その値を取得するにはobject値を取得する必要があります.
objects = detectionResult['objects']

for obj in objects:
    #print(obj)
重複文であるため、「object」の値は常に「obj」に繰り返される.

印刷すると矩形の値が得られることがわかります.
では、座標値を取得する必要があります.

上の図に示すように、x、y、w、hの値を「矩形」内の値に取って変数宣言中にエラーが発生しました.
なぜかというと、座標値はobjectの矩形内の座標値であるべきです.つまり、所属会社はあと2回くらい入るということです.
「長方形」の全体値が1つしか得られなかったため、エラーが発生しました.
だから上の複文を修正して、もう1行追加します.

objectにインポートされた「矩形」値の変数を宣言し、関数値をインポートする必要があります.
それからその座標を入れて、その座標に従って矩形を描きます.
draw = ImageDraw.Draw(img) #이미지 자체를 그리기 모드로 들어와서 대기하라는 명령.
描画モードに画像をロードすると、座標に従って長方形を描画し、線の色を決定できます.
    #사각형을 그리는 코드
    draw.rectangle(((x, y), (x + w, y + h)), outline='red')
すると矩形線が細くなります.
ボックスの上部に単語を入力する場合は、下のように上部に対応するx、y値を入力し、objectNameと書きます.
    #글자를 입력하는 코드
    objectName = obj['object']
    
    draw.text((x, y), objectName, fill='red') #이미지를 쓸수 있게끔 오픈된 상태 (draw)

そしてimgを入力すると、そのように出力されていることがわかります.

2.難点と解決策


顔認識機能を備えたFace APIも試みた.
ここで、上と値のトークン値を入力し、urlアドレスをロードします...今までと同じです.
2つは授業中に見逃した部分で、1つはパラメータ部分で、1つは上と同じように矩形線を描いたときです.
まずパラメータ部分が難しいわけではありませんが、問題はパラメータが何なのか分からないことです.
headers = {'Ocp-Apim-Subscription-key': subscription_key}
params = {
    'returnFaceID': 'true',
    'returnFaceAttributes': 'age,gender,emotion'
}
いずれにしても、固有値からどの値を抽出するかを発表しているようですが、動画ではよく見えないのでGoogleを試してみました.
参考資料:https://akdl911215.tistory.com/228
コンピュータプログラミングでは、パラメータ(parameter parameter)は変数の特殊なタイプであり、関数などのサブルーチン入力によって提供される様々なデータの1つを指す.ここで、サブルーチン入力として提供される複数のデータを伝達パラメータ(パラメータ)と呼ぶ.通常、パラメータリストはサブプログラムの定義セクションに含まれ、サブプログラムが呼び出されるたびに、呼び出しで使用される伝達パラメータがそれぞれ対応するパラメータに入力されます.
パラメータがどのように定義され、パラメータがサブプログラムにどのように伝達されるかを伝達する構文は、それぞれのプログラミング言語に基づいて定義されるが、各コンピュータシステムにおいて実際にどのように実現されるかは、システム呼び出し規則に依存する.
そうですが、よくわかりませんので、下記の画像で少し理解できます.

次に2つ目は矩形を抽出するときに宣言される関数値で、前とは少し違うので少し難しいです.
なぜxy講義をしなくてもいいのか、ビデオでもう一度見ました.
ここでは座標ではなく,すなわちx,yの値ではなく,写真の上端と左側の距離の結果値である.だから私は彼について変わった.
for face in faces:
    
    rect = face['faceRectangle']
    left = rect['left']
    top = rect['top']
    width = rect['width']
    height = rect['height']
    
    draw.rectangle(((left, top),(left+width,top+height)), outline='red')

3.勉強の心得


昨日のも復習して、今日のももう一度ビデオを見ました.
誤字のため、問題を解く回数は少し減ったが、未知の概念が現れるたびに、解釈だけでは理解しにくい.
Googleゲームをして、私は大体理解することができて、しかしやはり更にしばらく実習してようやく知ることができると感じます.
コンピューターがカメラに入った情報を自動的に分析し、コードで表示できること自体が神秘的で、この点にも興味が湧いてきた.