質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.62%

__init__() got multiple values for argument 'endpoint'エラー

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 881

Rondon7251

score 74

CustomvisionのAPIを使用したいです。
以下のプログラムでエラーが出ます。
原因や推察など何かわかる方がいましたら教えてください。
お願いします。
おそらく原因はbase_urlのURLが原因だと思います。
その解決を知っている方は教えてください。

import glob
from azure.cognitiveservices.vision.customvision.prediction import CustomVisionPredictionClient

base_url = "https://fishclassfiction.cognitiveservices.azure.com/"
projectID = 'a6b4a6be-c80c-4bf1-ab9a-d38ff5bc2e32'
publish_iteration_name = 'Iteration3'
prediction_key = 'd1a7f168692047458f0c620b884b8f40'

def testModel(testfiles, fishname):
    data_count = len(testfiles)
    true_count = 0

    # 予測用インスタンスの作成 …①
    predictor = CustomVisionPredictionClient(prediction_key, endpoint=base_url)

    for testfile in testfiles:
        predicts = {}
        with open(testfile, mode='rb') as f:
            # 予測実行 …②
            results = predictor.classify_image(projectID, publish_iteration_name, f.read())

        # 予測結果のタグの数だけループ …③
        for prediction in results.predictions:
            # 予測した魚とその確率を紐づけて格納 …④
            predicts[prediction.tag_name] = prediction.probability

        # 一番確率の高い魚を予測結果として選択 …⑤
        prediction_result = max(predicts, key=predicts.get)

        # 予測結果が合っていれば正解数を増やす
        if fishname == prediction_result:
            true_count += 1

    # 正解率の算出
    accuracy = (true_count / data_count) * 100
    print('正解率:' + str(accuracy) + '%')


# 検証用画像を保存したルートディレクトリパス
root_dir = 'fishimages/'
# 検証対象の魚名一覧
fishnames = ['アイゴ','オニカサゴ','カサゴ','カワハギ','キュウセンベラ',
             'クサフグ','ソウシハギ','マハゼ','マアジ','マイワシ','ミノカサゴ',
             'メジナ','メバル']

for fishname in fishnames:
    print('****' + fishname + '****')
    # testデータのリストを取得
    testfiles = glob.glob(root_dir + fishname + '/test/*')
    testModel(testfiles, fishname)

エラー

**アイゴ**

TypeError                                 Traceback (most recent call last)
<ipython-input-52-0f0d99c2d038> in <module>
10     # testデータのリストを取得
11     testfiles = glob.glob(root_dir + fishname + '/test/*')
---> 12     testModel(testfiles, fishname)

<ipython-input-51-99095a179497> in testModel(testfiles, fishname)

5     # 予測用インスタンスの作成 …①
----> 6     predictor = CustomVisionPredictionClient(prediction_key, endpoint=base_url)

8     for testfile in testfiles:

TypeError: init() got multiple values for argument 'endpoint'

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • quickquip

    2020/05/16 14:47

    実行環境にインストールしているazure関連パッケージ名もしくはインストール方法とバージョン。
    あなたがどうやってこのコードを書いたのかまたはどうしてこのコードが動くと思ったのか。
    を書きましょう。

    キャンセル

回答 2

checkベストアンサー

0

CustomVisionPredictionClient の説明のページを見ますと、CustomVisionPredictionClient(endpoint, credentials) と書いてありますので、順番が逆だと思います。

predictor = CustomVisionPredictionClient(base_url, prediction_key)


ではないでしょうか?

ちなみに、 TypeError: __init__() got multiple values for argument 'endpoint' というエラーですが、こちらは 'endpoint' に複数の値が渡されているという意味です。元のコードですと、おそらく prediction_key も 'endpoint' であると認識されています。

  • CustomVisionPredictionClient の説明のページ
    https://docs.microsoft.com/en-us/python/api/azure-cognitiveservices-vision-customvision/azure.cognitiveservices.vision.customvision.prediction.customvisionpredictionclient?view=azure-python

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

5     # 予測用インスタンスの作成 …①
----> 6     predictor = CustomVisionPredictionClient(prediction_key, endpoint=base_url)
7 
8     for testfile in testfiles:

TypeError: init() got multiple values for argument 'endpoint'


というのがエラーメッセージで

TypeError: init() got multiple values for argument 'endpoint'

[直訳] 型のエラー:引数 'endpoint' は、複数の値を取ります
というのがエラーになった理由です。

質問のプログラムでは、endpointが "https://fishclassfiction.cognitiveservices.azure.com/" という単一の文字列になっています。

しかし、Customvisionのサイトで、CustomVisionPredictionClient Constructors のページを見てみると、argumentにはHTTPの応答メッセージの処理を任せる(delegate)ハンドラー(型は、System.Net.Http.DelegatingHandler)のリストを指定しています。

このことから、CustomVisionPredictionClientの使い方を間違えているのがエラーの原因だと
考えられます。

==
僕はCustomVision APIを使ったことが無いのですが、CustomVisionPredictionClient Constructorsのページから情報を辿るか、"http://zure.ly/ai-intro/cognitive-book"からダウンロードできる ”Microsoft Azure Cognitive Services Book”などの資料を読むとヒントが得られるのではないかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る