React-Cniate Expo Fetch, сетевой запрос сбой. На Android Flask APIAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 React-Cniate Expo Fetch, сетевой запрос сбой. На Android Flask API

Сообщение Anonymous »

Проблема
У меня есть приложение Native Expo React, где я успешно называю свой API node.js, используя мой локальный IP. API работает как в эмуляторе, так и на моем физическом устройстве Android. Однако, когда я пытаюсь позвонить в свой API Flask, я получаю ошибку сетевого запроса.
Я запускаю приложение Flask на своей локальной машине (http: //192.168.x.x: 5000 ), и мое физическое устройство Android подключено к одной и той же сети Wi -Fi. транскрипция API. Он получает аудиофайл в формате Base64, декодирует его и транскрибирует его с помощью Speech_recognition. < /P>

Код: Выделить всё

from flask import Flask, request, jsonify
import base64
import tempfile
import speech_recognition as sr
from pydub import AudioSegment
from io import BytesIO
from flask_cors import CORS
import logging

app = Flask(__name__)
CORS(app, resources={
r"/*": {
"origins": "*",
"methods": ["GET", "POST", "OPTIONS"],
"allow_headers": ["Content-Type", "uthorization"]
}
})

logging.basicConfig(level=logging.DEBUG)

def transcribe_audio(audio_base64):

# Decode the base64 audio data
try:
audio_data = base64.b64decode(audio_base64)
except Exception as e:
return f"Error decoding base64 audio: {str(e)}"

# Convert base64 audio to a format that SpeechRecognition can use (WAV)
audio_file = BytesIO(audio_data)
audio = AudioSegment.from_file(audio_file)

# Create a temporary file to store the WAV audio
with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as temp_file:
audio.export(temp_file.name, format="wav")
temp_file_path = temp_file.name

# Use SpeechRecognition to transcribe the audio
recognizer = sr.Recognizer()
try:
with sr.AudioFile(temp_file_path) as source:
audio_listened = recognizer.record(source)
transcription = recognizer.recognize_google(audio_listened)
return transcription
except Exception as e:
return f"Error transcribing audio: {str(e)}"

@app.route('/health',methods=['GET'])
def health():
logging.info("Health check endpoint called")
return "Hello world from python"

@app.route('/transcribe', methods=['POST'])
def transcribe():
# Get the base64 audio data from the POST request
print("here")
data = request.json
print(data)
if not data or 'audio_base64' not in data:
return jsonify({"error": "Missing audio_base64 in request"}), 400

audio_base64 = data['audio_base64']

# Transcribe the audio
transcription = transcribe_audio(audio_base64)

if "Error" in transcription:
return jsonify({"error": transcription}), 500

return jsonify({"transcription": transcription}), 200

if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True,threaded=True)

< /code>
React Native Expo App
моя собственная функция React вызывает API Flask. Я записываю аудио с использованием Expo-AV, преобразую его в Base64 и отправляю его в колбу для транскрипции.  < /P>
import { Audio } from "expo-av";
import { MutableRefObject } from "react";
import * as Filesystem from "expo-file-system";
import { Platform } from "react-native";
import * as Device from "expo-device";
import axios from "axios"

export const transcribeSpeechAssembly = async (
audioRecordingRef: MutableRefObject
) => {
const isPrepared = audioRecordingRef?.current?._canRecord;
if (!isPrepared) {
console.error("Recording must be prepared first");
return undefined;
}

try {
await audioRecordingRef?.current?.stopAndUnloadAsync();
const recordingUri = audioRecordingRef?.current?.getURI() || "";
const baseUri = await Filesystem.readAsStringAsync(recordingUri, {
encoding: Filesystem.EncodingType.Base64
});

const rootOrigin =
Platform.OS === "android"
? "My local IP"
: Device.isDevice
? process.env.LOCAL_DEV_IP || "localhost"
: "localhost";

const serverUrl = `http://${rootOrigin}:5000`;

if (recordingUri && baseUri) {
console.log("url",`${serverUrl}/transcribe`)
const api = axios.create({
baseURL: serverUrl,
timeout: 10000,
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
});

try {
const healthCheck = await api.get('/health');
console.log("Health check response:", healthCheck.data);

const transcriptionResponse = await api.post('/transcribe', {
audio_base64: baseUri
});

console.log("Transcription response:", transcriptionResponse.data);
return transcriptionResponse.data?.transcription;
} catch (error) {
console.error("error from python server",error)
}
} else {
console.error("Something went wrong with recording");
return undefined;
}
} catch (error) {
console.error("Error in transcription process:", error);
return undefined;
}
};

То, что я попробовал
подтвержденный API Flask API:
Я проверил http://127.0.0.1:5000/Health и http: //192.168.x.x: 5000/здоровье в почтальоне и в моем браузере. Оба возвращают «Привет, мир от python».
Проверенные запросы сети выставки: < /p>
my node.js API работает нормально с http: //192.168.x.x: 3000.
Когда я звоню Flask (http: //192.168.x.x: 5000/транскрибибе), я получаю «Производный запрос сети».
разрешенная колба в Принять соединения: < /p>
App.run(host='0.0.0.0 ', Port = 5000, Debug = true, Threaded = true) гарантирует, что колба доступна с других устройств.
Проверенные проблемы с CORS: < /p>
Используется flask_cors, чтобы разрешить все происхождение.
Проверенные разрешения на андроид: < /p>
android manifest.xml включает в себя: < /p>

< /code>
ADB Reverse TCP: 5000 TCP: 5000 не помогает, поскольку это физическое устройство.
отключен брандмауэр /антивирус: < /p>
Нет Улучшение.
Проверенные вызовы API в Chrome Debugger: < /p>
Вызовы извлечения сбой с «Неисправностью сетевого запроса». < /p>

Подробнее здесь: https://stackoverflow.com/questions/794 ... -flask-api
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»