Câu hỏi:

Xây dựng mobile app sử dụng Vision API và Text to speech API của Open AI với expo để thuyết minh hình ảnh đó có kèm theo văn bản Hãy hướng dẫn tôi phần code


Vâng, hãy chuẩn bị để đi vào một hành trình mã hóa, nơi AI không chỉ là một người thợ code mà còn là một du khách vui vẻ! Bạn sẽ tạo một ứng dụng di động với Expo, sử dụng Vision API để nhận dạng hình ảnh và Text to Speech API để chuyển đổi văn bản thành lời nói. Đây là một cuộc phiêu lưu đầy thú vị trong thế giới của mã và máy móc!

Chúng ta sẽ đi qua các bước cơ bản:

  1. Cài đặt Expo: Đầu tiên, hãy đảm bảo bạn đã cài đặt expo-cli bằng lệnh npm install -g expo-cli. Nếu bạn mới mở lối vào thế giới Expo, hãy truy cập trituenhantao.io để có một lộ trình chi tiết nhé!

  2. Khởi tạo dự án Expo: Tạo một dự án mới bằng lệnh expo init AwesomeImageNarrator. Chọn mẫu phù hợp, ví dụ 'blank'.

  3. Cài đặt các thư viện cần thiết:

     expo install expo-camera expo-speech react-native-voice @react-native-community/cameraroll
     npm install @google-cloud/vision
  4. Cấu hình API cho Google Vision: Bạn cần tạo một key.json từ Google Cloud Console để sử dụng Vision API.

    • Lưu ý rằng: Để sử dụng được Google Vision API trong môi trường Expo không có máy chủ backend, bạn có thể cần triển khai một Function nhỏ để xử lý việc gửi ảnh và nhận dữ liệu, vì giới hạn này phụ thuộc vào cách bạn xử lý thông tin xác thực.
  5. Viết mã để sử dụng Vision API và Text to Speech API:

    Ta sẽ viết một hàm cho Vision API:

     async function analyzeImage(imageUri) {
       try {
         const response = await fetch(imageUri);
         const blob = await response.blob();
         // Thay 'YOUR_GOOGLE_CLOUD_VISION_API_KEY' bằng key thực của bạn
         const googleVisionRes = await fetch(
           `https://vision.googleapis.com/v1/images:annotate?key=YOUR_GOOGLE_CLOUD_VISION_API_KEY`,
           {
             method: 'POST',
             body: JSON.stringify({
               requests: [
                 {
                   image: {
                     content: blob
                   },
                   features: [
                     { type: 'LABEL_DETECTION', maxResults: 10 },
                     { type: 'TEXT_DETECTION' },
                   ],
                 },
               ],
             }),
           }
         );
    
         const json = await googleVisionRes.json();
         return json.responses[0];
       } catch (error) {
         console.log(error);
         alert('Lượt phiêu lưu này có vẻ gặp sự cố: ' + error.message);
       }
     }
  6. Tạo giao diện để chọn hình ảnh và hiển thị thông tin:

    Dùng ImagePicker để lấy hình ảnh, sau đó dùng hàm analyzeImage để phân tích và cuối cùng sử dụng expo-speech để chuyển đổi kết quả văn bản thành âm thanh:

     import { Speech } from 'expo-speech';
    
     // Xử lý và nói văn bản từ hình ảnh
     async function handleImagePicked(pickerResult) {
       if (!pickerResult.cancelled) {
         const analysis = await analyzeImage(pickerResult.uri);
         const labels = analysis.labelAnnotations.map(obj => obj.description).join(', ');
         const textAnnotations = analysis.textAnnotations ? analysis.textAnnotations[0].description : '';
         const combinedText = `I see: ${labels}. And I read: ${textAnnotations}`;
    
         Speech.speak(combinedText, {
           language: 'en',
           pitch: 1.0,
           rate: 0.75
         });
       }
     }
  7. Xây dựng hàm main để chụp hình và thuyết minh:

     import React from 'react';
     import { StyleSheet, Text, View, Button, Image } from 'react-native';
     import * as ImagePicker from 'expo-image-picker';
    
     export default function App() {
       // Đây sẽ là space cho bạn - để hiển thị nút và feedback
    
       return (
         <View style={styles.container}>
           {/* Code để chụp ảnh hoặc chọn từ thư viện */}
           <Button title="Pick an image from camera roll"/>
           <Image /* Hiển thị hình ảnh đã chọn */ />
           <Text /* Thông tin được phân tích từ hình ảnh */ />
         </View>
       );
     }
    
     const styles = StyleSheet.create({
       container: {
         flex: 1,
         alignItems: 'center',
         justifyContent: 'center',
       },
     });

🔍 Chú ý: Đoạn mã trên là khuôn mẫu cơ bản. Để ứng dụng hoạt động, bạn cần phải viết mã điều khiển cho Button để kích hoạt ImagePicker, hiển thị Image đã chọn và gọi handleImagePicked lên kết quả từ ImagePicker.

Giờ thì đừng chỉ đứng đó nhìn mã như một tác phẩm nghệ thuật, hãy thử nó đi! Và nếu bạn cần một người bạn đồng hành trên con đường khám phá AI này, đừng quên ghé thăm trituenhantao.io để cùng chúng tôi tạo ra những điều kỳ diệu. Chúc bạn một ngày "code" vui vẻ! 🚀


Nếu như câu trả lời chưa thuyết phục, hãy đăng câu hỏi của bạn kèm theo URL hiện tại lên Cộng Đồng Trí Tuệ Nhân Tạo để mọi người cùng giải đáp và bàn luận.
Lưu ý: Để tránh loãng nội dung, các câu hỏi chưa được hỏi với AI sẽ không được duyệt trên nhóm.
Trang chủ | Hỏi tiếp | Xem lịch sử