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

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

新規登録して質問してみよう
ただいま回答率
85.47%
UTF-8

UTF-8は8ビット符号単位の文字符号化形式及び文字符号化スキームです。データ交換方式、ファイル形式としては、一般的にUTF-8が使われる傾向があります。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

918閲覧

文字コードの変換エラーが起こる

Kokku

総合スコア39

UTF-8

UTF-8は8ビット符号単位の文字符号化形式及び文字符号化スキームです。データ交換方式、ファイル形式としては、一般的にUTF-8が使われる傾向があります。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/03/17 09:26

編集2021/03/17 09:26

Face++を使いフォルダ内の顔画像すべてに処理を行うプログラムを書いているのですが、その画像読み込み時に

1 2 detect2.py:52: DeprecationWarning: path should be string, bytes, or os.PathLike, not numpy.ndarray 'image_file': open(image, 'rb').read() Traceback (most recent call last): File "detect2.py", line 80, in <module> call_api() File "detect2.py", line 52, in call_api 'image_file': open(image, 'rb').read() UnicodeDecodeError: 'utf-8' codec can't decode byte 0xcf in position 0: invalid continuation byte

このようなエラーが起きてしまいます。

# coding: utf-8 import os import sys import csv import pandas as pd sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))) import requests from config import API_KEY, API_SECRET, DETECT_PATH ,ANALYZE_PATH from example.common import get_input_file_path import cv2 import codecs return_landmark = 0 return_attributes = None #calculate_all = 0 face_rectangle = '' beauty_score_min = 0 beauty_score_max = 100 def call_api(): data = { 'api_key': API_KEY, 'api_secret': API_SECRET, 'return_landmark': 1, 'return_attributes': 'gender,age,emotion' #'calculate_all': calculate_all, #'beauty_score_min': beauty_score_min, #'beauty_score_max': beauty_score_max } data_dir_path = u"E:/facepp-python-demo-master/facepp-python-demo-master/example/detect/images/images01/" file_list = os.listdir(r'E:/facepp-python-demo-master/facepp-python-demo-master/example/detect/images/images01/') #この内部の処理がうまくいっていない ################################################## for f in file_list: root, ext = os.path.splitext(f) print(1) if ext in ('.png', '.jpeg', '.jpg'): abs_name = data_dir_path +'/' + f image = cv2.imread(abs_name) print(2) #以下各画像に対する処理を記載する if face_rectangle: print(3) data.update({'face_rectangle': face_rectangle}) input_file = get_input_file_path(os.path.abspath(os.path.dirname(__file__)), f) files = { 'image_file': open(image, 'rb').read() } resp = requests.post(DETECT_PATH, data=data, files=files).json() with open('emotion.csv','w') as csv_file: writer = csv.writer(csv_file) for key, value in resp.items(): writer.writerows(resp) print(4) (pd.DataFrame.from_dict(data=resp,orient='index').to_csv('emotion_csv',header=False)) print(5) osp = resp['faces'] df = pd.io.json.json_normalize(osp) print(df) df.to_csv('emotion2_csv') print(6) #input_file = get_input_file_path(os.path.abspath(os.path.dirname(__file__)), 'input') if not face_rectangle: print('请将input.png/input.jpg文件放在detect目录下') return if not ext in ('.png', '.jpeg', '.jpg'): print("終了") #(pd.DataFrame.from_dict(data=osp, orient='index').to_csv('emotion2_csv', header=False)) #print(resp['faces']) ################################################ if __name__ == "__main__": call_api() print(7)

よくあるエラー内容なので調べたのですが
ignore='utf-8'
'utf-8','ignore'
encoding='Shift-JIS'

などを

'image_file': open(image, 'rb',######).read()

の箇所に入れてみたのですがエラーが直らなかったので質問させていただきました。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jbpb0

2021/03/17 10:13

image = cv2.imread(abs_name) をしたから、imageには画像ファイルのデータが入ってるのに、それをファイルパスとしてopen()に渡したら、エラーになりますよ open(image, 'rb')
Kokku

2021/03/17 10:31 編集

このコードでいうとimageをfに変えればいいということでしょうか 'E:/facepp-python-demo-master/facepp-python-demo-master/example/detect/images/images01 このプログラムはdetectフォルダにあるのですが処理を行いたい画像フォルダはimages/images01以下においてあるのですが それだと input_file = get_input_file_path(os.path.abspath(os.path.dirname(__file__)), f) ここの部分がおかしいんですかね
y_waiwai

2021/03/17 11:29

処理というのは何をしている(つもり)なんでしょうか
Kokku

2021/03/17 11:32

Face++のdetectAPIを使ってディレクトリ内のすべての画像に感情推定の処理を行いその結果を一つのCSVファイルに保存させることが最終的な目標です。
jbpb0

2021/03/22 05:47 編集

> imageをfに変えればいいということでしょうか 「f」は「E:/facepp-python-demo-master/facepp-python-demo-master/example/detect/images/images01/」にあるファイル名で、そこはPythonを実行してるディレクトリ「detect」とは違うので、「f」だけ「open()」に渡しても「f」は見つからないためopenできないと思います
jbpb0

2021/03/22 05:59

> input_file = get_input_file_path(os.path.abspath(os.path.dirname(__file__)), f) ここの部分がおかしいんですかね 「get_input_file_path()」の処理内容が分からないので何とも言えませんが、「os.path.abspath(os.path.dirname(__file__))」の結果はPythonコードファイルが置いてある「detect」の絶対パスで、それは「f」が置いてある場所とは違うので、「input_file」に代入されるのは「f」の正しいパスでは無いような気がします (あくまでも気がするだけです) ただし、「input_file」はそれ以降で使われてないので、仮に「input_file =...」の行が現状間違っているとして、それを正しく直しても、それだけではこの質問のエラーの解消はしません 「input_file」に正しいパスが代入されるように直されて、エラーが出ている「open()」の引数の「image」を「input_file」に変えたら良いのかは、それが質問者さんのコードの意図と合ってるか私には分かりませんので、判断できません 「open()」の引数の「image」を何に変えたら正解なのかは、ご自分が書いたコードの意図に合わせて、ご自分でご判断ください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問