Cách sử dụng OpenAI Text completion API để tạo mô tả cho ảnh trong Flutter

Trong hướng dẫn này, chúng ta sẽ sử dụng OpenAI Text completion API để tạo mô tả cho ảnh. Chúng ta sẽ sử dụng Flutter để phát triển ứng dụng di động.

Nội dung

  1. Lấy API Key
  2. Gửi yêu cầu đến Text completion API
  3. Tạo giao diện người dùng

1. Lấy API Key

Để sử dụng Text completion API, bạn cần đăng ký và lấy API key tại OpenAI website. Sau khi đăng ký thành công, bạn có thể tìm thấy API key trong phần API Keys của trang cài đặt tài khoản.

2. Gửi yêu cầu đến Text completion API

Sau khi có API key, chúng ta có thể sử dụng Text completion API để tạo mô tả cho ảnh. Để làm điều này, chúng ta cần gửi một yêu cầu POST tới endpoint của API với các thông số cần thiết như prompt (đoạn văn để hoàn thành), max tokens (số lượng từ tối đa trong đầu ra), model (mô hình sử dụng để hoàn thành) và inputs (dữ liệu đầu vào).

Để thực hiện điều này, chúng ta sẽ tạo một lớp TextCompletionService trong Flutter để quản lý các yêu cầu tới API. Ở đây, chúng ta sử dụng thư viện http để gửi yêu cầu tới API. Bạn có thể thêm http vào pubspec.yaml như sau:

dependencies:
  flutter:
    sdk: flutter
  http: 

Sau đó, chúng ta có thể tạo lớp TextCompletionService như sau:

import 'dart:convert';
import 'package:http/http.dart' as http;

class TextCompletionService {
  final String apiKey;

  TextCompletionService({required this.apiKey});

  Future<String> generateDescription({required String photoUrl}) async {
    const prompt = 'Please write a short description for this photo:';
    const temperature = 0.7;
    const maxTokens = 50;
    const model = 'text-davinci-002';

    final response = await http.post(
      Uri.parse('https://api.openai.com/v1/completions'),
      headers: {'Content-Type': 'application/json', 'Authorization': 'Bearer $apiKey'},
      body: json.encode({
        'prompt': '$prompt\n$photoUrl\n',
        'temperature': temperature,
        'max_tokens': maxTokens,
        'model': model,
        'inputs': photoUrl
      }),
    );

    if (response.statusCode == 200) {
      final output = json.decode(response.body)['choices'][0]['text'] as String;
      return output.trim();
    } else {
      throw Exception('Failed to generate description');
    }
  }
}

Ở đây, chúng ta định nghĩa các thông số cần thiết cho Text completion API như prompt, max tokens vàmodel. Chúng ta sử dụng hàm http.post để gửi yêu cầu tới API với các thông số này và API key được thêm vào header. Sau đó, chúng ta trích xuất đầu ra từ phản hồi và trả về mô tả rồi hiển thị ra màn hình.

3. Tạo giao diện người dùng

Sau khi chúng ta có TextCompletionService, chúng ta có thể sử dụng nó để tạo mô tả cho ảnh trong ứng dụng của mình. Để làm điều này, chúng ta sẽ tạo một trang để người dùng có thể tải lên ảnh và nhận mô tả được tạo ra bởi Text completion API.

Trang này có thể được tạo bằng cách sử dụng một số widget của Flutter như Column, Image, và RaisedButton. Chúng ta cũng có thể sử dụng thư viện image_picker để cho phép người dùng chọn ảnh từ thư viện hoặc máy ảnh của thiết bị.

Dưới đây là ví dụ về cách tạo trang này:

import 'dart:io';

import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:path/path.dart';
import 'package:text_completion_flutter/text_completion_service.dart';

class HomePage extends StatefulWidget {
  const HomePage({Key? key}) : super(key: key);

  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  File? _image;
  String? _description;
  final picker = ImagePicker();
  final service = TextCompletionService(apiKey: 'YOUR_API_KEY_HERE');

  Future getImage() async {
    final pickedFile = await picker.getImage(source: ImageSource.gallery);

    setState(() {
      if (pickedFile != null) {
        _image = File(pickedFile.path);
      } else {
        print('No image selected.');
      }
    });

    if (_image != null) {
      final description = await service.generateDescription(photoUrl: _image!.path);
      setState(() {
        _description = description;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Image Description'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            _image == null
                ? Text('No image selected.')
                : Image.file(
                    _image!,
                    height: 200,
                  ),
            SizedBox(height: 16),
            _description == null
                ? TextButton(
                    onPressed: getImage,
                    child: Text('Select Image'),
                  )
                : Text(_description!),
          ],
        ),
      ),
    );
  }
}

Ở đây, chúng ta sử dụng phương thức getImage để cho phép người dùng chọn ảnh. Sau khi người dùng chọn ảnh, chúng ta gửi nó đến TextCompletionService để tạo mô tả và hiển thị nó lên trên giao diện người dùng.

Kết luận

Trong hướng dẫn này, chúng ta đã tìm hiểu cách sử dụng Text completion API của OpenAI với Flutter để tạo ra mô tả cho các hình ảnh. Chúng ta đã tạo một lớp dịch vụ để gửi yêu cầu tới API và trích xuất đầu ra, sau đó sử dụng nó để tạo ra mô tả cho các hình ảnh được tải lên bởi người dùng.

Ngoài việc tạo mô tả cho các hình ảnh, Text completion API còn có thể được sử dụng trong nhiều trường hợp khác nhau như tạo câu tiếp theo, hoàn thành đoạn văn bản, hay đề xuất từ khóa cho các bài viết. Vì vậy, hướng dẫn này cũng có thể giúp bạn hiểu cách sử dụng Text completion API để giải quyết các vấn đề khác nhau trong ứng dụng của bạn.

Related posts:

  1. Chat GPT là gì? Những điều cần biết về ChatGPT
  2. GPT là gì? GPT hoạt động như thế nào? Sử dụng GPT như thế nào?
  3. Hướng dẫn sử dụng zip và unzip trên Centos