import React, { useRef, useEffect, useState } from "react"; import { StyleSheet, View, Button, Alert } from "react-native"; import { Camera, useCameraDevices } from "react-native-vision-camera"; import * as ImageManipulator from "expo-image-manipulator"; const App = () => { const [hasPermission, setHasPermission] = useState(false); const [cameraType, setCameraType] = useState("back"); // Default to rear camera const camera = useRef(null); const devices = useCameraDevices(); const device = cameraType === "back" ? devices.back : devices.front; useEffect(() => { (async () => { const status = await Camera.requestCameraPermission(); setHasPermission(status === "authorized"); })(); }, []); const captureImage = async () => { if (!camera.current) return; try { const photo = await camera.current.takePhoto({ quality: 0.8, // Adjust quality as needed }); console.log("Captured Image Path:", photo.path); // Correct image orientation for the rear camera const fixedImage = await ImageManipulator.manipulateAsync( photo.path, [{ flip: cameraType === "back" ? ImageManipulator.FlipType.Horizontal : undefined }], // Flip for rear camera { compress: 1, format: ImageManipulator.SaveFormat.JPEG } ); console.log("Fixed Image Path:", fixedImage.uri); // Send the fixed image to the backend const formData = new FormData(); formData.append("file", { uri: fixedImage.uri, type: "image/jpeg", name: "photo.jpg", }); const response = await fetch("https://", { method: "POST", body: formData, }); const data = await response.json(); Alert.alert("OCR Result", data || "No text detected."); } catch (error) { console.error("Error capturing image:", error); Alert.alert("Error", "Failed to capture image. Please try again."); } }; if (!device || !hasPermission) return ; return (