利用人工智能和机器人技术实现复杂的自动化任务!

news2024/9/21 2:39:56

这篇mylangrobot项目由neka-nat创建,本文已获得作者Shirokuma授权进行编辑和转载。

https://twitter.com/neka_nat

GitHub-mylangrobot :GitHub - neka-nat/mylangrobot: Language instructions to mycobot using GPT-4V

引言

本项目创建了一个使用GPT-4V和myCobot的一个演示,演示机械臂简单得到拾取操作,这个演示使用了一个名叫SoM(物体检测对象)的方法,通过自然语言生成机器人动作。通俗点换一句话来说就是,机器接受自然语言,去寻找目标然后让机械臂进行抓取的一个案例。

本项目的亮点主要是GPT-4V的图像处理和SoM物体检测算法相结合,通过自然语言和机器交互实现机械臂运动。

软件

SoM

Set of Mark(SoM)是一种用于增强大型语言模型的视觉理解能力。图像经过SoM处理之后能够在图像上添加一系列的标记,这些标记能够被语言类模型识别和处理。这些标记有助于模型更准确的识别和理解图像中的物体和内容。

这使得语言模型能够针对图像中的元素进行更精准的分析和描述,从而提高其在视觉任务上的表现。

GPT-4V

我们常聊的GPT是一个大预言模型,我们可以跟它进行对话聊天。在迭代新的版本的GPT-4V是一个大模型多模态语言模型,它不单单能处理文本信息,现在还能够处理图像信息。能够对图像理解,图像生成,图像描述的功能,这样大模型结合GPT-4的强大自然语言处理能力和现金的图像分析技术,可以提供更高效和更准确的视觉和语言综合能力。

下面是OpenAI 提供的例子

简要介绍:将一个视频提供给GPT4,通过GPT-4V对图像的处理,生成对视频讲解的内容的过程。原文链接:Processing and narrating a video with GPT's visual capabilities and the TTS API | OpenAI Cookbook

User:
"These are frames from a video that I want to upload. Generate a compelling description that I can upload along with the video."

视频中某一帧的图像

#GPT-4V对图像的描述处理
GPT4:
"🐺 Survival of the Fittest: An Epic Tale in the Snow ❄️ - Witness the intense drama of nature as a pack of wolves face off against mighty bison in a harsh winter landscape. This raw footage captures the essence of the wild where every creature fights for survival. With each frame, experience the tension, the strategy, and the sheer force exerted in this life-or-death struggle. See nature's true colors in this gripping encounter on the snowy plains. 🦬"

Remember to respect wildlife and nature. This video may contain scenes that some viewers might find intense or distressing, but they depict natural animal behaviors important for ecological studies and understanding the reality of life in the wilderness.

Openai-whisper

Introducing Whisper

OpenAI开发的一种自动语音识别(ASR)系统。它使用先进的深度学习技术来转录、翻译和理解人类的语音。Whisper的特点是它能够支持多种语言,且在识别不同口音和噪音环境下的语音方面表现出色。此外,它还能够处理不同的音频质量,使其适用于多种应用场景,如转录会议记录、自动生成字幕和辅助翻译等。

pymycobot

GitHub - elephantrobotics/pymycobot: This is a python API for ElephantRobotics product.

pymycobot是针对mycobot机器人系列的python库。MyCobot是一款小型、多功能的协作机器人臂,适用于教育、研究和轻量级工业应用。PyMyCobot库提供了一套简单的编程接口,使开发者能够控制和编程MyCobot机器人,进行例如移动、抓取、感应等操作。这个库支持多种操作系统和开发环境,方便集成到各种项目中,特别是在机器人学和自动化领域的应用。通过使用Python这种广泛使用的编程语言,pymycobot使得操作和实验MyCobot机器人变得更加易于访问和灵活。

硬件

myCobot 280M5 

myCobot 280 M5是大象机器人公司生产的一款桌面级小型六轴协作机器人。这款机器人臂设计紧凑,适用于教育、研究和轻型工业应用。myCobot 280 M5支持多种编程和控制方式,适用于各种操作系统和编程语言,包括:

主控和辅控芯片:ESP32

支持蓝牙(2.4G/5G)和无线(2.4G 3D Antenna)

多种输入和输出端口

支持自由移动、关节运动、笛卡尔运动、轨迹录制和无线控制

兼容操作系统:Windows、Linux、MAC

支持编程语言:Python、C++、C#、JavaScript

支持编程平台和工具:RoboFlow、myblockly、Mind+、UiFlow、Arduino、mystudio

支持通信协议:串口控制协议、TCP/IP、MODBUS 

这些特性使myCobot 280 M5成为一个多功能、易于使用且适用于多种应用场景的机器人解决方案。

myCobot 垂直吸泵 V2.0

通过真空吸附原理工作,提供3.3V IO控制,可以广泛大在于各种嵌入式设备的开发使用。

摄像头

标准的USB接口和LEGO接口,USB接口可以搭配各种PC设备使用,LEGO接口可以便捷固定,可应用于机器视觉,图像识别等应用。

mylangrobot 软件分析

根据开头描述的项目流程具体的流程如下:

  1. 音频输入:首先录入音频指令
  2. 音频处理:使用“openai-whisper”对音频进行处理,转化为文本
  3. 语言模型交互:利用GPT-4模型处理转换后的文本指令,理解用户的命令
  4. 图像处理:使用GPT-4V 和 增强图像能力的SoM来对图像处理寻找指令提到的目标
  5. 机械臂控制:控制机械臂对识别出的目标进行抓取

音频处理

该功能用到了speech_recognition 是用来手机麦克风的音频数据,能够让计算机进行识别。

使用到的库

import io
import os
from enum import Enum
from typing import Protocol

import openai
import speech_recognition as sr
from pydub import AudioSegment
from pydub.playback import play

定义接口,获取用户的输入,像用户输出。

class Interface(Protocol):
    def input(self, prefix: str = "") -> str:
        return prefix + self._input_impl()

    def _input_impl(self) -> str:
        ...

    def output(self, message: str) -> None:
        ...

首先初始化麦克风设备,用于音频的输入和输出

class Audio(Interface):
    def __init__(self):
        self.r = sr.Recognizer()
        self.mic = sr.Microphone()
        # openai-whisper API key
        self.client = openai.OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))

将输入的音频转化为文本格式输出。

 def _input_impl(self) -> str:
        print("Please tell me your command.")
        with self.mic as source:
            self.r.adjust_for_ambient_noise(source)
            audio = self.r.listen(source)

        try:
            return self.r.recognize_whisper(audio, language="japanese")

        except sr.UnknownValueError:
            print("could not understand audio")
        except sr.RequestError as e:
            print("Could not request results from Google Speech Recognition service; {0}".format(e))

最后返回的r就是获得音频的文本格式可以用于GPT-4模型的交互。

图像处理和GPT4语言交互

在传输文本格式给GPT-4模型交互是,是和图像一起传递过去,所以图像处理和交互一起讲解。

图像处理使用到的库

import cv2
import numpy as np
import supervision as sv
import torch
from segment_anything import SamAutomaticMaskGenerator, sam_model_registry

from .utils import download_sam_model_to_cache

主要是用到的是SamAutomaticMaskGenerator这个功能,将检测到的目标进行标记以及绘制标记。

#将图像转化为RGB格式
        image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
#对图像处理,进行目标检测和标记的绘制
        sam_result = self.mask_generator.generate(image_rgb)
        detections = sv.Detections.from_sam(sam_result=sam_result)
        height, width, _ = image.shape
        image_area = height * width

        min_area_mask = (detections.area / image_area) > self.MIN_AREA_PERCENTAGE
        max_area_mask = (detections.area / image_area) < self.MAX_AREA_PERCENTAGE
        detections = detections[min_area_mask & max_area_mask]
        
        
        #返回图片和检测的信息的结果
        labels = [str(i) for i in range(len(detections))]
        annotated_image = mask_annotator.annotate(scene=image_rgb.copy(), detections=detections)
        annotated_image = label_annotator.annotate(scene=annotated_image, detections=detections, labels=labels)
        return annotated_image, detections

就能得到这样的效果。

note:下面的功能需要获取GPT-4的API-Key,才能够进行使用。

将得到的结果照片传递给GPT-4模型,需要经过一些处理之后才能实现。经过GPT-4V可以对图片进行处理最后返回出来图片内容的信息,以及得到相对应序号的物体信息。

def prepare_inputs(message: str, image: np.ndarray) -> dict:
    # # Path to your image
    # image_path = "temp.jpg"
    # # Getting the base64 string
    base64_image = encode_image_from_cv2(image)

    payload = {
        "model": "gpt-4-vision-preview",
        "messages": [
            {"role": "system", "content": [metaprompt]},
            {
                "role": "user",
                "content": [
                    {
                        "type": "text",
                        "text": message,
                    },
                    {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{base64_image}"}},
                ],
            },
        ],
        "max_tokens": 800,
    }

    return payload


def request_gpt4v(message: str, image: np.ndarray) -> str:
    payload = prepare_inputs(message, image)
    response = requests.post("https://api.openai.com/v1/chat/completions", headers=headers, json=payload)
    res = response.json()["choices"][0]["message"]["content"]
    return res

机械臂控制和整体整合

在图像处理和GPT-4V模型处理完后会根据解析的指令生成目标的点位信息,这些点位信息被传递给机械臂控制系统,机械臂控制系统根据点位信息移动到响应的位置进行抓去动作。

主要涉及几个方法,移动到目标物体

    def move_to_object(self, object_no: int, speed: Optional[float] = None) -> None:
        object_no = self._check_and_correct_object_no(object_no)
        print("[MyCobotController] Move to Object No. {}".format(object_no))
        detection = (
            np.array([-self._detections[object_no][0], -self._detections[object_no][1]]) + self.capture_coord.pos[:2]
        )
        print("[MyCobotController] Object pos:", detection[0], detection[1])
        self.move_to_xy(detection[0], detection[1], speed)

grab动作

    def grab(self, speed: Optional[float] = None) -> None:
        print("[MyCobotController] Grab to Object")
        current_pos = self.current_coords().pos
        self.move_to_z(self.object_height + self.end_effector_height, speed)
        self._mycobot.set_basic_output(self._suction_pin, 0)
        time.sleep(2)
        self.move_to_z(current_pos[2], speed)

drop动作

    def move_to_place(self, place_name: str, speed: Optional[float] = None) -> None:
        print("[MyCobotController] Move to Place {}".format(place_name))
        self._current_position = self.positions[place_name]
        self._mycobot.sync_send_angles(
            np.array(self._current_position) + self.calc_gravity_compensation(self._current_position),
            speed or self._default_speed,
            self._command_timeout,
        )
        print("Current coords: {}".format(self.current_coords()))

各个功能个实现了之后需要协调整个流程操作,梳理流程逻辑最后完成任务。

具体的代码可以查看operator.py文件。

实例测试

下面进行实例测试来看项目成果,内容是语音输入“pick up the chocolate”,机械臂去执行任务。

https://youtu.be/Eda1m7DnIhQ

视频

总结

这个项目展示了如何利用先进的人工智能和机器人技术来实现复杂的自动化任务。通过结合语音识别、自然语言处理、图像分析和精确的机械臂控制,该项目成功地创建了一个能够理解和执行语言指令的机器人系统。这不仅提高了机器人与人类交互的自然度和效率,而且还开辟了机器人技术在各种实际应用中的新可能性,如自动化制造、物流、助手机器人等领域。

最后再次感谢Shirokuma,给我们分享这个案例。如果你有更好的案例欢迎联系我们!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1367429.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL运维实战(3.1) MySQL官方客户端使用介绍

作者&#xff1a;俊达 引言 MySQL是MySQL安装包默认的客户端&#xff0c;该客户端程序通常位于二进制安装包的bin目录中&#xff0c;或者通过rpm安装包安装mysql-community-client&#xff0c;是数据库管理系统的重要组成部分。MySQL客户端不仅仅是一个简单的软件工具&#x…

【数据库原理】(15)数据关系模式与规范

在数据库系统设计中&#xff0c;数据模式的设计是至关重要的。这涉及到如何将现实世界的复杂结构和关系有效地转化为适宜的数据模式。关系模式&#xff0c;得益于其坚实的数学理论基础&#xff0c;不仅能以二维表的形式清晰地表达实体&#xff0c;还能描述实体之间的相互关系&a…

使用STM32和MPU6050实现基于手势的室内导航系统

基于STM32和MPU6050的基于手势的室内导航系统是一个创新而具有挑战性的项目。在本文中&#xff0c;我们将介绍如何利用STM32微控制器和MPU6050传感器实现基于手势的室内导航系统&#xff0c;并提供相应的代码示例。 1. 系统概述 基于手势的室内导航系统旨在通过手势识别的方式…

使用Adobe Acrobat Pro DC给pdf文件填加水印

前言 GPT4的官方售价是每月20美元&#xff0c;很多人并不是天天用GPT&#xff0c;只是偶尔用一下。 如果调用官方的GPT4接口&#xff0c;就可以按使用量付费&#xff0c;用多少付多少&#xff0c;而且没有3个小时内只能提问50条的使用限制。 但是对很多人来说调用接口是比较麻烦…

自动驾驶轨迹预测

目录 神经网络轨迹预测综述&#xff1a; 比较新的轨迹预测网络 Uber&#xff1a;LaneRCNN[5] Google&#xff1a;VectorNet[6] Huawei&#xff1a;HOME[7] Waymo&#xff1a;TNT[8] Aptive&#xff1a;Covernet[9] NEC&#xff1a;R2P2[10] 商汤&#xff1a;TPNet[11]…

小H靶场笔记:DC-6

DC-6 January 6, 2024 12:06 PM Tags: nmap提权&#xff0c;WordPress Owner&#xff1a;只惠摸鱼 信息收集 apr-scan和nmap探测主机后&#xff0c;发现靶机ip&#xff1a;192.168.199.136&#xff0c;端口22和80开放 扫描端口服务、版本、操作系统、默认脚本扫描 扫描开…

Dora-rs 机器人框架学习教程(3)——利用yolo实现目标检测

文章目录 1 安装pytroch环境1.1 nvidia驱动1.2 安装cuda1.3 在conda中安装pytorch GPU版本1.4 检验pytroch是否安装正确 2 编写程序代码2.1 object_detection.py文件内容如下&#xff1a;2.2 dataflow.yml 文件内容如下&#xff1a; 3 运行参考资料 目标&#xff1a;在dora框架…

Hyperledger Fabric Docker 方式多机部署生产网络

规划网络拓扑 3 个 orderer 节点&#xff1b;组织 org1 , org1 下有两个 peer 节点&#xff0c; peer0 和 peer1; 组织 org2 , org2 下有两个 peer 节点&#xff0c; peer0 和 peer1; 因为我只有 3 台虚拟机资源所以没法实现完全的多机部署&#xff0c;资源使用规划如下&#…

各种锁的概述

乐观锁与悲观锁 悲观锁指对数据被外界修改持保守态度&#xff0c;认为数据很容易就会被其他线程修改&#xff0c;所以在数据被处理前先对数据进行加锁&#xff0c;并在整个数据处理过程中&#xff0c;使数据处于锁定状态。 悲观锁的实现往往依靠数据库提供的锁机制&#xff0…

react antd 计算公式 (+-*/)运算,回显

计算器的源码计算器触发事件源码 import { DictValueEnumObj } from /components/DictTag; import { getDeptTree, getFormulaListAll, getListAll } from /services/Energy/Metering;import { getListAllInfo, getDepartmentName } from /services/Energy/Calculation; import…

带前后端H5即时通讯聊天系统源码

带有前后端的H5即时通讯聊天系统源码。该源码是一个开源的即时通信demo&#xff0c;需要前后端配合使用。它的主要目的是为了促进学习和交流&#xff0c;并为大家提供开发即时通讯功能的思路。尽管该源码提供了许多功能&#xff0c;但仍需要进行自行开发。该项目最初的开发初衷…

CVE-2023-36025 Windows SmartScreen 安全功能绕过漏洞

CVE-2023-36025是微软于11月补丁日发布的安全更新中修复Windows SmartScreen安全功能绕过漏洞。攻击者可以通过诱导用户单击特制的URL来利用该漏洞&#xff0c;对目标系统进行攻击。成功利用该漏洞的攻击者能够绕过Windows Defender SmartScreen检查及其相关提示。该漏洞的攻击…

伦敦银1盎司等于多少克?

1盎司的伦敦银大概等于31克&#xff0c;用于衡量伦敦银重量的“盎司”&#xff0c;是国际贵金属市场上专用的计量单位&#xff0c;它的全称是金衡盎司&#xff0c;英文的名字是troy ounce&#xff0c;它与西方日常用于计算重量的单位常衡盎司也不一样&#xff0c;一金衡盎司约等…

[论文阅读]4DRadarSLAM: A 4D Imaging Radar SLAM System for Large-scale Environments

目录 1.摘要和引言&#xff1a; 2. 系统框架&#xff1a; 2.1 前端&#xff1a; 2.2 回环检测&#xff1a; 2.3 后端&#xff1a; 3.实验和分析&#xff1a; 4.结论 1.摘要和引言&#xff1a; 这篇论文介绍了一种名为“4DRadarSLAM”的新型4D成像雷达SLAM系统&#xff0…

【ChatGPT+】创新与教育的交汇点:中国训练工程师的崛起

人工智能总价值超15.7万亿美元 根据国际数据公司&#xff08;IDC&#xff09;的预测&#xff0c;到2030年&#xff0c;全球人工智能市场总价值将超过15.7万亿美元&#xff0c;这表明人工智能技术将在未来几十年内得到广泛应用并取得长足发展。 人工智能的快速发展将对各个领域…

JAVA基础语句1

目录 前言 一.JAVA特性 简单 面向对象 分布式 多线程 二.关键字 三.对象和类 对象 类 构造方法 创建对象 访问实例变量和方法 源文件声明规则 Java 包 import 语句 总结 前言 这里参考了&#xff1a;Java 教程 | 菜鸟教程 (runoob.com) 第一个必须是&#xff1a; hello world&a…

2024腾讯云免费服务器申请入口,限制及申请攻略亲测!

腾讯云免费服务器申请入口 https://curl.qcloud.com/FJhqoVDP 免费服务器可选轻量应用服务器和云服务器CVM&#xff0c;轻量配置可选2核2G3M、2核8G7M和4核8G12M&#xff0c;CVM云服务器可选2核2G3M和2核4G3M配置&#xff0c;腾讯云百科txybk.com分享2024年最新腾讯云免费服务器…

idea修改pom.xml没有重新导入maven的按钮

问题描述&#xff1a; IDEA修改pom.xml配置以后&#xff0c;不会展示 Load Maven Changes弹窗。 解决方法&#xff1a; 方式一、pom.xml右键&#xff0c;Maven--Run Maven--Reimport。但我感觉这个太麻烦了。 方式2、选择Building Tool Settings&#xff0c;点击Auto-Reload …

指针传参误区

C语言中指针作为形参传递时&#xff0c;func&#xff08;*a, *b&#xff09; 这种形式的话&#xff0c;是无法通过简单的 ab来修改的&#xff0c;在函数体内a的地址确实被修改成b的地址了&#xff0c;但是当函数执行结束时&#xff0c;a的地址会重新回到原本的地址里面&#xf…