用手势识别来测试视力?试试用百度AI来实现想法

⭐ 前言

10月17日,以“生成未来(PROMPT THE WORLD)”为主题的百度世界2023将在北京首钢园举办。百度创始人、董事长兼首席执行官李彦宏将带来以“手把手教你做AI原生应用”为题的一小时演讲。关于大模型、AI原生应用的最新进展也将悉数亮相。

在这里插入图片描述

这是百度世界四年来首次回归线下举办,除多场主题论坛外,还带来近50项AI科技展,包括Prompt胶囊墙、AI全息数字人等,为参会者带来沉浸式AI体验。

⭐ 灵感来源

百度智能云千帆大模型平台是一站式企业级大模型平台,提供先进的生成式AI生产及应用全流程开发工具链。具有丰富的产品功能、多样的交付方案与服务、全面领先的平台功能、内置丰富优质的大模型能力、预置典型的应用范式。例如训练与推理性能方面,MLPerf榜单训练性能世界领先,千亿模型分布式并行训练加速能力和算力利用率大幅提升。

在这里插入图片描述

10月1放假期间使用手机的频率有点高,导致视力下降,打算去眼镜店重新配个眼镜。可能是学生放假的缘故,眼镜店的人还真不少,就连测视力都排起了长龙。想到百度AI提供的人体分析技术,做一款【智能视力表】应用的想法油然而生。
准备的图片如下:

在这里插入图片描述

3(Three)代表左,4(Four)代表右,上(Thumb_up)就是上,下(Thumb_down)就是下。以下就以动作代表的含义来描述。括号中的英文就是最终应用根据手势识别出的文字信息。
创意步骤:

  • 将视力表中的“E”从上到下分好组,提前录入应用;
  • 打开智能视力表,将手机固定到眼睛50cm的正前方,“上”代表左眼视力开始,“下”代表右眼视力开始;
  • 开始之后应用会按“E”从小到大的顺序来弹出,人做出上下左右的手势,应用识别之后给出是否正确的答案;
  • 如果正确就会给出同组的另一个“E”,连着两个回答正确才会通过,然后提示换另一只眼睛;如果连续的三次中有两个回答错误,就会弹出大一点的“E”,直到通过。
  • 两只眼睛测试完毕之后给出最终的结果。

⭐ 项目准备

废话不多说,搭建来一波。我用的是Python环境,学过Python的同学应该都会搭建环境了,没学过的同学可以自行百度安装(此处不是本文重点)。

(1)安装千帆SDK

pip install qianfan
注意:目前支持 Python >= 3.7版本。

(2)调用千帆SDK
步骤一,创建应用,获取应用API Key(AK) 和 Secret Key(SK)。
步骤二,初始化AK 和 SK。
步骤三,调用SDK。

(3)视力表图片准备

如图,准备了几张示例照片,大家可以找专业的美工来定制不同的图片。

在这里插入图片描述

⭐ 项目实现

图片处理
模拟图片分组,将图片按照不同的视力数值分组

image_map = OrderedDict()
image_map[4.1] = ['4.1上.jpg', '4.1左.jpg']
image_map[5.1] = ['5.1上.jpg', '5.1下.jpg', '5.1左.jpg', '5.1右.jpg']

然后从最后一个索引开始随机弹出照片“5.1上.jpg”

在这里插入图片描述

代码如下:

def get_picture(image_map):
    index = len(image_map.items())
    key = list(image_map.keys())[index-1]
    value = list(image_map.values())[index-1]
    image = random.choice(value)
    return key,image

创建应用
打开人体分析页面,创建“智能视力表”应用,获取应用API Key(AK) 和 Secret Key(SK)。

在这里插入图片描述

获取签名
通过应用的API_KEY和SECRET_KEY 获取应用的 access_token

def get_access_token():
    url = "https://aip.baidubce.com/oauth/2.0/token"
    params = {"grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY}
    return str(requests.post(url, params=params).json().get("access_token"))

手势识别
我们看到应用随机出现的“E”之后,用手势来表示看到的“E”开口方向

在这里插入图片描述

应用首先要获取到图片对应的base64编码

def get_file_content_as_base64(path, urlencoded=False):
    with open(path, "rb") as f:
        content = base64.b64encode(f.read()).decode("utf8")
        if urlencoded:
            content = urllib.parse.quote_plus(content)
    return content

根据获取的 access_token ,调用手势识别接口获取手势的意义。

def gesture():
    url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/gesture?access_token=" + get_access_token()
    payload = get_file_content_as_base64("下.jpg",True)
    headers = {
        'Content-Type': 'application/x-www-form-urlencoded',
        'Accept': 'application/json'
    }
    response = requests.request("POST", url, headers=headers, data=payload)
    print(response.text)

得到的调试结果如下:

{
    "result": [
        {
            "classname": "Thumb_up",
            "top": 175,
            "left": 158,
            "probability": "0.5745857357978821",
            "width": 397,
            "height": 536
        }
    ],
    "result_num": 1,
    "log_id": "1711926132646834128"
}

将result中的classname取出与最早定义好的“上(Thumb_up)”对比来判断对错就可以了。

⭐ 不足与展望

我上边只是将创意进行了简单的实现,里边还有些许不完美的地方,比如视力表图片的制作,视力表图片的录入,判断连续几次成功或者失败的逻辑等都是可以继续优化的地方。希望在不久的将来我可以用上相关厂家提供的【智能视力表】。作为参会者,我非常期待在百度世界大会上看到最新的人工智能技术,希望AI科技展的AI全息数字人能带给我不一样的震撼与体验。同时也非常期待百度世界大会后将会有更多的AI原生应用涌现。最后,祝百度世界大会圆满成功。

  • 111
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 32
    评论
在Spring Boot项目中使用百度AI的车牌识别功能,可以通过调用百度AI提供的RESTful API来实现。下面是一个示例代码,可以帮助你完成在Spring Boot项目中调用百度AI车牌识别的功能: 1. 引入依赖 在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>com.baidu.aip</groupId> <artifactId>java-sdk</artifactId> <version>4.15.3</version> </dependency> ``` 2. 创建配置类 在Spring Boot项目中创建一个配置类,用于初始化百度AI的相关配置信息,如API Key、Secret Key等。代码如下: ```java @Configuration public class BaiduAIConfig { @Value("${baidu.ai.app-id}") private String appId; @Value("${baidu.ai.api-key}") private String apiKey; @Value("${baidu.ai.secret-key}") private String secretKey; @Bean public AipOcr aipOcr() { // 初始化AipOcr AipOcr aipOcr = new AipOcr(appId, apiKey, secretKey); // 设置连接超时时间和读取超时时间 aipOcr.setConnectionTimeoutInMillis(2000); aipOcr.setSocketTimeoutInMillis(60000); return aipOcr; } } ``` 在上面的代码中,我们使用了@Configuration注解来将该类声明为Spring的配置类,使用@Value注解来注入配置文件中的API Key、Secret Key等信息。我们创建了一个名为aipOcr的Bean,用于初始化AipOcr对象。使用setConnectionTimeoutInMillis()和setSocketTimeoutInMillis()方法设置了连接超时时间和读取超时时间。 3. 创建Controller 在Spring Boot项目中创建一个Controller,用于接收上传的图片,并调用百度AI的车牌识别API进行识别。代码如下: ```java @RestController @RequestMapping("/car") public class CarPlateController { @Autowired private AipOcr aipOcr; @PostMapping("/plate") public String carPlateRecognition(@RequestParam("image") MultipartFile image) throws Exception { // 车牌识别 byte[] bytes = image.getBytes(); HashMap<String, String> options = new HashMap<>(); JSONObject result = aipOcr.licensePlate(bytes, options); if (result != null && result.has("words_result")) { JSONObject wordsResult = result.getJSONObject("words_result"); String number = wordsResult.getString("number"); return "车牌号码:" + number; } else { return "识别失败"; } } } ``` 在上面的代码中,我们使用了@RestController注解来声明该类为一个RESTful风格的Controller,使用@Autowired注解来注入AipOcr对象。我们创建了一个名为carPlateRecognition的方法,用于接收上传的图片,并调用百度AI的车牌识别API进行识别。我们使用MultipartFile对象来接收上传的图片,使用licensePlate()方法调用百度AI的车牌识别API,最后解析结果得到车牌号码。 4. 测试 在浏览器或Postman等工具中发送POST请求,请求路径为/car/plate,上传一张包含车牌的图片,即可测试百度AI的车牌识别功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

几何心凉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值