인프런 커뮤니티 질문&답변

candyclara님의 프로필 이미지
candyclara

작성한 질문수

15일간의 빅데이터 파일럿 프로젝트

3.텐서플로를 이용한 신경망 분석 - 스마트카 이상징후 판별 4

flask에서 API호출 에러

작성

·

824

0

안녕하세요~선생님,

마지막 수업 "3.텐서플로를 이용한 신경망 분석 - 스마트카 이상징후 판별 4" 에서 다음과 같은 크롬에서 API호출 에러가 발생합니다.

Anaconda prompt에는 정상적으로 실행이 되는데 API호출 변수에 이상이 있는 것 같습니다.

API호출 함수를 아래와 같이 두 가지로 해보았으나 같은 에러가 발생합니다.

(1)127.0.0.1:9001/smartcar/predict?wea=2&temp=0&hum=1&arrOthCar=2&time=0&acciArea=1&drvCond=1&innCond=2&carSpd=2&steeAng=0

(2)127.0.0.1:9001/smartcar/predict?wea=2&temp=0&hum=1&arrCar=2&timeSlot=0&acciArea=1&drvCond=1&innCond=2&carSpd=2&steeAng=0

감사합니다~

답변 8

0

candyclara님의 프로필 이미지
candyclara
질문자

선생님 말씀대로 Python3.5로 재설치하여 성공하였습니다^^ 감사드립니다~꾸벅

 Success Request.PNG

Big.D님의 프로필 이미지
Big.D
지식공유자

안녕하세요! 빅디 입니다.

이런 문제는 현장에서 매우 빈번하게 발생하곤 합니다.

필드에선 한 서버에 자바 or 파이썬 등의 환경을 공유 하는 여러 시스템들을 구성 하는 경우도 많은 데요.

이땐 누군가가 파이썬 버젼을 올려 버리면, 기존 버젼의 라이브러리에서 작동하던 다른 시스템들의 프로그램에 문제가 발생하는게 비일비재 일어납니다.

문제는 이 원인을 찾는게...간단히 해결되기도 하지만, Candyclara님처럼 돌아돌아 많은 시간을 소모 하는 경우가 많다는 것 입니다. ^^;;

그래서 파일럿 프로젝트에서 이런 경험을 직간접적으로 얻는 것이 아~주 중요 합니다.

-빅디 드림

0

candyclara님의 프로필 이미지
candyclara
질문자

선생님 말씀주신대로 print()추가하고, Chrom 브라우져에서 API를 호출하였습니다.

그런데 def predict()내에서는 print()문이 작동하지 않습니다,,

Bad Request_VSCode.PNG

Big.D님의 프로필 이미지
Big.D
지식공유자

네~ 파이썬 버젼이 좀 높네요!

의심 되는건 26번째줄의 flask.request.args 로 보입니다.

우선 아래처럼 해보시고요..

관련방법이 여러가지라 테스트를 해봐야 할것같습니다. - 빅디 드림

 

request.get_json(force=True,silent=True)

0

candyclara님의 프로필 이미지
candyclara
질문자

이번에는 VSCode로 실행하여 로그를 보내드립니다~

Bad Request_VSCode.PNG

Big.D님의 프로필 이미지
Big.D
지식공유자

네~ candyclara 님!

위 VSCode 환경에서 아래 내용으로 테스트좀 해봐 주세요!!!

 

VSCode에서 앞서 작업 했었던 print() 문을 추가해 주시고요,

Chrom 브라우져에서 API를 호출 하고요,

다시 VSCode로 와서 로그의 스크린샷 부탁 드립니다.

추가로 flask 실행환경에서 파이썬과 플라스크의 Version도 아래 명령으로 확인 부탁 드립니다~

$ python --version

$ flask --version

 

특별히 큰 문제로 보이지는 않습니다. 아마도 환경 문제인거 같은데요..

하나씩 문제의 원인을 좁혀 보시죠~ ^^

-빅디 드림

 

0

candyclara님의 프로필 이미지
candyclara
질문자

선생님 죄송한데 제가 아직 실력이 부족하여 "Flask 콘솔의 로그"를 어디서 확인하는지 모릅니다 ㅠ

Bad Request.PNG

Big.D님의 프로필 이미지
Big.D
지식공유자

아~ 네 콘솔은 별게 아니고 로그가 찍히는곳을 말합니다.^^

Step 1~3 은 api 호출후 찍히는 로그라서, 브라우져에서 url입력후, 앞서 처럼 hello bigdata 가 찍힌 창의 스크린샷 부탁 드립니다~

-빅디 드림

0

candyclara님의 프로필 이미지
candyclara
질문자

Bad Request.PNG

Big.D님의 프로필 이미지
Big.D
지식공유자

아~ 네! candyclara님!

제가 요청 했던 사항이 좀 명확하지 않았네요...^^;;;;

저렇게 Bad Request가 난 상태에서 Flask 콘솔의 로그를 보기위한 스크린샷을 확인 부탁 드립니다.

확인하고 싶은 사항은 Flask or Rest API의 URI 문제인지, 파라미터 or Model의 문제인지를 확인해 보고 싶어서 입니다. 만약 파라미터 또는 DNN모델이 문제라면 ".........Step2"까지 로그가 찍히고 Error로그가 찍힐 겁니다.

확인 부탁드려요~ -빅디 드림

0

candyclara님의 프로필 이미지
candyclara
질문자

아래와 같이 print문을 5군데 삽입하여 실행했는데 처음과 마지막은 출력이 되는데 중간에 3군데는 출력되지 않습니다,,

pmg.PNG

실행결과는 아래와 같습니다

run_result.PNG감사합니다~

Big.D님의 프로필 이미지
Big.D
지식공유자

네~ 혹시 API 호출은 해보셨는지요?!

호출후 스크린샷 부탁 드립니다. -빅디 드림

0

Big.D님의 프로필 이미지
Big.D
지식공유자

안녕하세요! candyclara님!

점심 맛나게 하셨는지요~

로그출력이 안되는건 제가 가이드를 잘못드렸네요..죄송합니다. ^^;;;

먼저 sys 패키지를 import 해주시고요, print 명령 옵션을 아래처럼 추가해 주세요~

import sys

print("hello bigdata", file = sys.stdout)

 

-빅디 드림

0

Big.D님의 프로필 이미지
Big.D
지식공유자

안녕하세요! candyclara님!

드뎌 파일럿 프로젝트 막판까지 오셨군요!! ^^

끝까지 파이팅 입니다~

Bad Request가 왜 났는지 Flask의 smart_dnn_service.py에 로그를 찍어 봐야 할 것 같습니다.

간단하게 predict()함수 부분에서 아래처럼 print 명령으로 "step1,2,3"을 찍어서 재실행봐 주세요!!

-빅디 드림

 

@app.route('/smartcar/predict', methods=["GET","POST"])

def predict():

data = {"success": False}

params = flask.request.json

if (params == None):

params = flask.request.args

print("...........................................................Step-1")

print(params)

# if parameters are found, return a prediction

if (params != None):

x=pd.DataFrame.from_dict(params, orient='index').transpose()

print("...........................................................Step-2")

print(x)

with graph.as_default():

data["prediction"] = str(model.predict(x).argmax())

data["success"] = True

# return a response in json format

print("...........................................................Step-3")

print(data)

return flask.jsonify(data)

 

candyclara님의 프로필 이미지
candyclara
질문자

선생님 말씀대로 print문을 넣고 실행했는데 출력이 안됩니다

캡처.PNG

candyclara님의 프로필 이미지
candyclara

작성한 질문수

질문하기