1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

PHÁT TRIỂN ROBOT THÔNG MINH TÍCH HỢP CÔNG NGHỆ CHATGPT

34 1 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề PHÁT TRIỂN ROBOT THÔNG MINH TÍCH HỢP CÔNG NGHỆ CHATGPT
Tác giả Trần Quốc Việt
Người hướng dẫn TS. Dương Văn Lạc
Trường học Đại học Bách Khoa Hà Nội
Chuyên ngành Cơ Điện Tử
Thể loại Đồ Án Tốt Nghiệp
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 34
Dung lượng 1,52 MB

Cấu trúc

  • CHƯƠNG 1. TỔNG QUAN ĐỀ TÀI (9)
    • 1.1 Giới Thiệu (9)
    • 1.2 Tổng quan về đề tài (9)
      • 1.2.1 Tổng quan về robot (9)
      • 1.2.2 Tổng quan về ChatGPT (10)
    • 1.3 Đặt vấn đề (10)
    • 1.4 Đề xuất thiết kế mô hình (11)
      • 1.4.1 Nhiệm vụ của robot thông minh (11)
      • 1.4.2 Đề xuất thiết kế (11)
      • 1.4.3 Nguyên lý hoạt động của robot thông minh (11)
    • 1.5 Tổng kết (12)
  • CHƯƠNG 2: THIẾT KẾ ROBOT THÔNG MINH (13)
    • 2.1 Chương trình giao tiếp (13)
      • 2.1.1 Thiết kế giao diện (13)
      • 2.1.2 Thiết kế hệ thống logic (17)
    • 2.2 Thiết kế hệ thống điều khiển (24)
      • 2.2.1 Xử lý ảnh ( nhận diện khuân mặt ) (24)
      • 2.2.2 Thiết kế phần cứng (25)
  • CHƯƠNG 3: KIỂM NGHIỆM THỰC TẾ (31)
  • CHƯƠNG 4: KẾT LUẬN VÀ PHƯƠNG HƯỚNG PHÁT TRIỂN ĐỂ TÀI (33)
    • 4.1 Kết luận (33)
    • 4.2 Phương hướng phát triển đề tài (33)
  • TÀI LIỆU THAM KHẢO (34)

Nội dung

Xã hội thế kỉ 21 chứng kiến sự phát triển vượt bậc của công nghệ và đánh dấu sự mở đầu của những thiết bị thông minh như smartphone, smartTV. Đó đều là những thiết bị ngày càng phổ biến, thông dụng trong đời sống hằng ngày của con người. Đúng như tên gọi, những thiết bị này không những có khả năng đáp ứng những yêu cầu cơ bản của con người, mà còn hơn thế, các thiết bị “smart” ra đời đã thay thế con người trong việc kiểm soát và điều khiển các chức năng khác một cách chuyên nghiệp, dễ dàng và hiệu quả. Tiếp nối những thành công đó, robot và trí tuệ nhân tạo ra đời như một khởi đầu táo bạo về tư duy làm chủ công nghệ ngay trong cuộc sống của con người. Một con robot có khả năng giao tiếp và trò chuyện với con người nhanh chóng chở thành đề tài công nghệ có sức hấp dẫn. Robot là một thiết bị tự động có khả năng thực hiện các nhiệm vụ hoặc ông việc mà trước đây thường được thực hiện bởi con người. Robot được lập trình để thực hiện các tác vụ cụ thể hoặc tự động thích ứng với môi trường xung quanh, thường được tích hợp các cảm biến và hệ thống điều khiển để thu thập các thông tin và thực hiện các hành động. Robot có thể có hình dáng và các chức năng khác nhau, từ robot công nghiệp trong quá trình sản xuất đến robot phục vụ trong lĩnh vực y tế, dịch vụ và giải trí. Trí tuệ nhân tạo (Artificial Intelligence) là lĩnh vực khoa học và công nghệ tập trung nghiên cứu và phát triển các hệ thống hoặc máy móc có khả năng tự học, tự suy luận và thực hiện các nhiệm vụ thông minh mà trước đây chỉ có thể thực hiện bởi con người. Trí tuệ nhân tạo có thể được áp dụng để xử lý thông tin, nhận diện hình ảnh và giọng nói, dự đoán kết quả, tự động điều khiển và tương tác với môi trường xung quanh. Nó nhằm tạo ra các hệ thống thông minh có khả năng học tập và cải thiện hiệu suất theo thời gian, mang lại lợi ích và tiện ích cho con người. Ý tưởng đồ án dựa trên việc tích hợp ChatGPT – một AI đang rất phổ biến và được ưa chuộng ở thời điểm hiện tại từ đó kết hợp với các hệ thông cơ điện tử từ đó tạo ra một robot có khả năng tương tác với người dùng. Đề tài này là một sản phẩm có tính thực tế cao dựa trên nhu cầu công nghệ hiện nay, được nghiên cứu, chế tạo dựa trên những kiến thức em đã học, kế thừa và phát huy những kết quả của

THIẾT KẾ ROBOT THÔNG MINH

Chương trình giao tiếp

Chương trình được tạo bằng ngôn ngữ Dart và xử dụng framework Flutter, đây là một framework phổ biến và mạnh mẽ giúp chương trình có thể chạy được trên cả hai nền tảng Android và IOS Với rất nhiều thư viện được hỗ trợ bởi bên thứ ba, Flutter sẽ là lựa chọn tuyệt vời để thiết kế phần mềm cho robot thông minh.

Robot sẽ có 3 giao diện ứng với 3 quá trình xử lý của robot: trạng thái mặc định, trạng thái lắng nghe và trạng thái trả lời.

*, Giao diện hiển thị Phần code giao diện:

@override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: BounceInDown( child: const Text('HustAI'), ), centerTitle: true, ), body: Center( child: ElevatedButton( onPressed: _startListening, child: Column( children: [ // virtual assistant picture ZoomIn( child: Stack( children: [ Center( child: Container( height: 250, width: 250, margin: const EdgeInsets.only(top: 4), decoration: const BoxDecoration( color: Pallete.assistantCircleColor, shape: BoxShape.circle,

), ), ), Visibility( visible: imgFace == null, child: Container( height: 200, decoration: const BoxDecoration( shape: BoxShape.circle, image: DecorationImage( image: AssetImage(

), ), ), ), Visibility( visible: imgFace == "hear", child: Container( height: 200, decoration: const BoxDecoration( shape: BoxShape.circle, image: DecorationImage( image: AssetImage(

), ), ), ), Visibility( visible: imgFace == "answer", child: Container( height: 200, decoration: const BoxDecoration( shape: BoxShape.circle, image: DecorationImage( image: AssetImage(

Hình 2.1 Chương trình giao diện Giải thích code:

Ban đầu, ta sẽ đặt 1 biến là imgFace với giá trị mặc định là rỗng và biến có thể nhận các giá trị khác nhau ứng với mỗi giai đoạn Với giá trị mặc định rỗng thì giao diện sẽ hiển thị ảnh mặc định Khi người dùng bắt đầu hỏi thì biến imgFace sẽ được gán giá trị là hear, lúc này giao diện sẽ được chuyển sang trạng thái nghe Cuối cùng, khi người dùng kết thúc câu hỏi và robot bắt đầu trả lời thì biến imgFace sẽ được gán giá trị answer, khi đó giao diện sẽ chuyển sang trạng thái trả lời.

*, Thiết kế nút bấm vật lý:

Nút bấm vật lý có nhiệm vụ chuyển từ trạng thái mặc định qua trạng thái lắng nghe mà người dùng không cần nói Nút bấm sẽ có tác dụng trong trường hợp người dùng muốn robot trực tiếp lắng nghe yêu cầu của người dùng mà không cần thông qua mệnh lệnh.

Phần code nút bấm: floatingActionButton: ZoomIn(

//delay: Duration(milliseconds: start + 3 * delay), child: FloatingActionButton( backgroundColor: Pallete.firstSuggestionBoxColor, onPressed: _floatingActionButtonOnPressed, child: Icon( speechToText.isListening ? Icons.stop : Icons.mic, ),

Hình 2.2 Chương trình nút bấm Giải thích code: Ở đây ta sử dụng floatingActionButton trong Flutter giúp tạo ra một nút bấm mà khi người dùng nhấn vào thì chương trình sẽ chạy hàm _floatingActionButtonOnPressed, nội dung của hàm này sẽ được giải thích ở phần sau Khi nút bấm được nhấn thì trên màn hình sẽ chuyển từ biểu tượng mic qua biểu tượng stop, đây là hai biểu tượng được tích hợp sẵn trong flutter.

2.1.2 Thiết kế hệ thống logic Đây sẽ là phần trọng tâm của robot, có khả năng phân tích và xử lý cũng như trả lời những yêu cầu mà người dùng đưa ra.

2.1.2.1 Liên kết với chatGPT Ở đây ta sẽ tích hợp API của chatGPT và app. import 'dart:convert'; import 'package:allen/secrets.dart'; import 'package:http/http.dart' as http; class OpenAIService { final List messages = [];

Future isArtPromptAPI(String prompt) async { try { final res = await http.post(

Uri.parse('https://api.openai.com/v1/chat/completions'), headers: {

'Content-Type': 'application/json', 'Authorization': 'Bearer $openAIAPIKey', }, body: jsonEncode({

'Does this message want to generate an AI picture, image, art or anything similar? $prompt Simply answer with a yes or no.',

} ], }), ); print(res.body); if (res.statusCode == 200) { String content = jsonDecode(res.body)['choices'][0]['message']['content']; content = content.trim(); switch (content) { case 'Yes': case 'yes': case 'Yes.': case 'yes.': final res = await dallEAPI(prompt); return res; default: final res = await chatGPTAPI(prompt); return res;

} } return 'Đã có lỗQ i xa Ry ra với server';

Future chatGPTAPI(String prompt) async { messages.add({

'role': 'user', 'content': prompt, try { final res = await http.post(

Uri.parse('https://api.openai.com/v1/chat/completions'), headers: {

'Content-Type': 'application/json', 'Authorization': 'Bearer $openAIAPIKey', }, body: jsonEncode({

"model": "gpt-3.5-turbo", "messages": messages, }),

); if (res.statusCode == 200) { String content = jsonDecode(res.body)['choices'][0]['message']['content']; content = content.trim(); messages.add({

'role': 'assistant', 'content': content, }); return content;

} return 'Đã có lỗQ i xa Ry ra với server';

Future dallEAPI(String prompt) async { messages.add({

'role': 'user', 'content': prompt, }); try { final res = await http.post(

Uri.parse('https://api.openai.com/v1/images/generations'), headers: {

'Content-Type': 'application/json', 'Authorization': 'Bearer $openAIAPIKey', }, body: jsonEncode({

}), ); if (res.statusCode == 200) { String imageUrl = jsonDecode(res.body)['data'][0]['url']; imageUrl = imageUrl.trim(); messages.add({

'role': 'assistant', 'content': imageUrl, }); return imageUrl;

} return 'Đã có lỗQ i xa Ry ra với server';

Hình 2.3 Chương trình kết nối với chatGPT Ở đây ta sử dụng 2 API đã được OpenAI cho phép các lập trình viên sử dụng miễn phí, từ đó ta có thể liên kết được với ChatGPT và Dall-E để nhận về những câu tra lời dưới dạng văn bản hoặc hình ảnh Cách thực hiện có thể tìm được trên trang chủ của OpenAi

Bước 1: Ta phải tạo một mã KeyAPI từ tài khoản chatGPT của mình, và được gán vào biến openAPIKey.

Bước 2: Vào trang chủ của chatGPT và sao chép đoạn code đã được nhà phát triển công bố Ở đây ta sẽ nhận được một hàm isArtPromptAPI với giá trị nhận vào là câu hỏi của người dùng

Nếu chương trình hoạt động thì ta sẽ nhận được dưới dạng văn bản đối với câu trả lời là văn bản hoặc là một đường liên kết nếu câu trả lời là hình ảnh Nếu chương trình không trả ra bất cứ gì thì ta sẽ để mặc định trả về đoạn văn bản “ Đã có lỗi xảy ra với server”.

Từ đây ta đã nhận được dữ liệu trả về và có thể sử dụng để trả lời yêu cầu của người dùng.

2.1.2.2 Hệ thống giao tiếp Phần này được thiết kế để tiếp nhận yêu cầu của người dùng sau đó chuyển câu hỏi về dưới dạng văn bản để chatGPT xử lý Sau khi nhận được câu trả lời như đã nói ở phần 2.1.2.1 nội dung sẽ được chuyển từ dạng văn bản thành lời nói để trả lời người dùng. import 'package:allen/feature_box.dart'; import 'package:allen/openai_service.dart'; import 'package:allen/pallete.dart'; import 'package:animate_do/animate_do.dart'; import 'package:flutter/material.dart'; import 'package:flutter_tts/flutter_tts.dart'; import 'package:speech_to_text/speech_recognition_result.dart'; import 'package:speech_to_text/speech_to_text.dart'; class HomePage extends StatefulWidget { const HomePage({super.key});

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

} class _HomePageState extends State { final speechToText = SpeechToText(); final flutterTts = FlutterTts();

String lastWords = ''; final OpenAIService openAIService = OpenAIService();

String? imgFace; int start = 200; int delay = 200;

@override void initState() { super.initState(); initSpeechToText(); initTextToSpeech();

Future initTextToSpeech() async { await flutterTts.setSharedInstance(true); setState(() {});

Future initSpeechToText() async { await speechToText.initialize(); setState(() {});

} Future startListening() async { await speechToText.listen(onResult: onSpeechResult); setState(() {});

Future stopListening() async { await speechToText.stop(); setState(() {});

} void onSpeechResult(SpeechRecognitionResult result) { setState(() { lastWords = result.recognizedWords; print(lastWords);

Future systemSpeak(String content) async { await flutterTts.speak(content);

} void _startListening() async { if (!speechToText.isListening) { bool available = await speechToText.initialize( onStatus: (status) { print('onStatus: $status');

}, onError: (error) { print('onError: $error');

}, ); if (available) { speechToText.listen( onResult: (result) { String command = result.recognizedWords.toLowerCase(); print('You said: $command');

// XửR lý lệnh ở R đây, ví dụ: if (command == 'tra R lời tỗi') { speechToText.hasPermission; speechToText.isNotListening;

// Trigger sự kiện onPressed cu Ra FloatingActionButton _floatingActionButtonOnPressed();

} } } void _floatingActionButtonOnPressed() async { if (await speechToText.hasPermission && speechToText.isNotListening) { await systemSpeak("Tỗi có thểR giúp gì cho bạn"); await startListening(); print("start listening"); imgFace = "hear";

} else if (speechToText.isListening) { final speech = await openAIService.isArtPromptAPI(lastWords); print("start answer"); if (speech.contains('https')) { generatedImageUrl = speech; generatedContent = null; setState(() {});

} else { generatedImageUrl = null; generatedContent = speech; print(generatedContent); setState(() {}); await systemSpeak(speech);

} await stopListening(); imgFace = "answer"; setState(() { _startListening();

//await systemSpeak("What task can i do for you");

@override void dispose() { super.dispose(); speechToText.stop(); flutterTts.stop();

Hình 2.4 Chương trình giao tiếp

Giải thích code: Ở đây ta sử dụng 2 thư viện là flutter_tts để chuyển từ văn bản thành lời nói và speech_to_text để chuyển lời nói thành văn bản.

Ban đầu khi vừa khởi động hàm _startlistening sẽ được chạy Hàm này có nhiệm vụ là nếu robot đang không ở trong trạng thái lắng nghe thì sẽ chuyển qua trạng thái lắng nghe Ở đây ta có biến command sẽ ghi lại lời người dùng nói, nếu lời người dùng nói trùng khớp với giá trị mặc định thì hàm _floatingActionButtonOnPressed sẽ được chạy.

Hàm _ floatingActionButtonOnPressed sẽ được chạy khi người dùng nói đúng mệnh lệnh mặc định hoặc nhấn nút trên màn hình Khi chạy biến speech sẽ được gán bằng với giá trị trả về của hàm isArtPromptAPI trong class openAIService đã được viết từ trước, với đầu vào là giá trị của biến lastword Biến lastword ghi lại yêu cầu của người dùng thông qua hàm onSpeechResult

Nếu câu trả lời nhận được là văn bản thì robot sẽ phát lại thành lời thông qua hàm systemSpeak

Nếu câu trả lời là hình ảnh thì hình ảnh sẽ được hiển thị ra màn hình.

Sau khi thực hiện xong nhiệm vụ thì chương trình sẽ được setState để lặp lại quy trình.

Thiết kế hệ thống điều khiển

Hệ thống điều khiển sẽ bao gồm các thiết bị điện tử và phần mềm nhận diện khuân mặt

Thông qua camera, hệ thộng xác định vị trí của người dùng và từ đó điều chỉnh sao cho màn hình tương tác luôn hiện thị về phía người dùng.

2.2.1 Xử lý ảnh ( nhận diện khuân mặt )

Chương trình nhận diện khuân mặt import cv2 import serial ser = serial.Serial('COM6', 9600) face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') droidcam_url = 'http://10.97.185.113:4747/video' # -read image from IP cap = cv2.VideoCapture(droidcam_url) while True: ret, frame = cap.read() gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=2, minSize=(30, 30))

# time.sleep(0.1) print(len(faces)) if len(faces) > 0: ser.write(b'0') else: ser.write(b'1') for (x, y, w, h) in faces: cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2) cv2.imshow('Face Detection', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()

Hình 2.5 Chương trình nhận diện khuân mặt Ở đây ta sử dụng thư viện xử lý ảnh OpenCV2 với cascade classifier Với thư viện này, thông qua camera ta có thể xác định được số người có mặt trước camera Với biến faces là số người nhận diện được, ta sẽ gửi tín hiệu tới Arduino để xử lý Khi faces nhận về giá trị lớn hơn 0 ta sẽ gửi về giá trị là 0 và với các giá trị còn lại ta sẽ gửi về giá trị là 1.

2.2.2 Thiết kế phần cứng Ở đây ta sử dụng 1 động cơ DC, 1 thiết bị điều khiển động cơ 1 chiều L298, 1 vi điều khiển Arduino và 1 máy tính nhúng raspberry Pi 4b.

Máy tính nhúng raspberry Pi 4b sẽ có nhiệm vụ xử lý và thực hiện chương trình xử lý ảnh Ở đây máy tính nhúng được kết nối với camera thông qua ứng dụng DroiCam Ứng dụng này cho phép camera điện thoại có thể kết nối với máy tính nhúng thông qua mạng wifi và từ đó truyền hình ảnh nhận được về máy tính nhúng Như đã nói ở phần 2.2.1, sau khi nhận diện được số người có mặt thì máy tính nhúng sẽ gửi tín hiệu cho Arduino Thông qua cổng Serial, arduino sẽ nhận được các giá trị trả về từ máy tính nhúng Ở đây ta sử dụng biến command để ghi lại các giá trị đó Nếu biến command nhận giá trị là 1, tức là không có người phía trước camera Khi đó Arduino sẽ điều khiển để động cơ tiếp tục quay từ đó điều chỉnh hướng của camera và xác định vị trí mặt người Khi command nhận giá trị là 0, tức là camera đã nhận diện ra vị trí của người dùng Từ đó Arduino sẽ điều khiển để động cơ dừng lại qua đó vị trí màn hình sẽ luôn hướng về phía người sử dụng.

Chương trình điều khiển động cơ của Arduinio

Serial.begin(9600); pinMode(13, OUTPUT); digitalWrite(13,LOW);

} void loop() { if (Serial.available() > 0){ char command = Serial.read(); if (command == '1'){ digitalWrite(13,HIGH);

Hình 2.6 Chương trình điều khiển động cơ Sơ đồ kết nối

Hình 2.7 Sơ đồ kết nối

KIỂM NGHIỆM THỰC TẾ

Sản phẩm sau khi hoàn thành có khả năng nghe hiểu và giao tiếp với người sử dụng, qua đó thực hiện các yêu cầu mà người sử dụng đưa ra Ngoài ra sản phẩm phải đảm bảo được việc xác nhận được vị trí người sử dụng để luôn hướng màn hình giao diện về phía người sử dụng từ đó thuận tiện cho người dùng.

Hình 3.1 Robot lắng nghe yêu cầu của người dùng

Hình 3.2 Robot trả lời yêu cầu của người dùng

Ngày đăng: 29/06/2024, 00:23

HÌNH ẢNH LIÊN QUAN

Hình 2.1 Chương trình giao diện Giải thích code: - PHÁT TRIỂN ROBOT THÔNG MINH TÍCH HỢP CÔNG NGHỆ CHATGPT
Hình 2.1 Chương trình giao diện Giải thích code: (Trang 15)
Hình 2.2 Chương trình nút bấm Giải thích code: - PHÁT TRIỂN ROBOT THÔNG MINH TÍCH HỢP CÔNG NGHỆ CHATGPT
Hình 2.2 Chương trình nút bấm Giải thích code: (Trang 17)
Hình 2.3 Chương trình kết nối với chatGPT - PHÁT TRIỂN ROBOT THÔNG MINH TÍCH HỢP CÔNG NGHỆ CHATGPT
Hình 2.3 Chương trình kết nối với chatGPT (Trang 20)
Hình 2.4 Chương trình giao tiếp - PHÁT TRIỂN ROBOT THÔNG MINH TÍCH HỢP CÔNG NGHỆ CHATGPT
Hình 2.4 Chương trình giao tiếp (Trang 23)
Hình 2.5 Chương trình nhận diện khuân mặt - PHÁT TRIỂN ROBOT THÔNG MINH TÍCH HỢP CÔNG NGHỆ CHATGPT
Hình 2.5 Chương trình nhận diện khuân mặt (Trang 25)
Hình 2.6 Chương trình điều khiển động cơ Sơ đồ kết nối - PHÁT TRIỂN ROBOT THÔNG MINH TÍCH HỢP CÔNG NGHỆ CHATGPT
Hình 2.6 Chương trình điều khiển động cơ Sơ đồ kết nối (Trang 26)
Hình 2.7 Sơ đồ kết nối - PHÁT TRIỂN ROBOT THÔNG MINH TÍCH HỢP CÔNG NGHỆ CHATGPT
Hình 2.7 Sơ đồ kết nối (Trang 26)
Hình 2.8 Mô hình robot - PHÁT TRIỂN ROBOT THÔNG MINH TÍCH HỢP CÔNG NGHỆ CHATGPT
Hình 2.8 Mô hình robot (Trang 27)
Hình 3.1 Robot lắng nghe yêu cầu của người dùng - PHÁT TRIỂN ROBOT THÔNG MINH TÍCH HỢP CÔNG NGHỆ CHATGPT
Hình 3.1 Robot lắng nghe yêu cầu của người dùng (Trang 31)
Hình 3.2 Robot trả lời yêu cầu của người dùng - PHÁT TRIỂN ROBOT THÔNG MINH TÍCH HỢP CÔNG NGHỆ CHATGPT
Hình 3.2 Robot trả lời yêu cầu của người dùng (Trang 32)

TỪ KHÓA LIÊN QUAN

w