论文阅读:Action recognition for human-marionette interaction.

该论文在ACM MM 2012上获最佳论文提名。

摘要

作者提出了基于人体动作识别方法的人类-木偶交互系统,并以此开发了交互艺术木偶戏模仿木偶游戏这两个应用。
交互艺术木偶戏:木偶模仿人类的动作,然后人再模仿木偶的动作。该木偶的制作涉及到了动作识别与木偶的控制系统,其中前一个方面是该文章重点。作者将开发出的智能木偶称为i-marionette。作者在该部分还叙述了木偶戏的艺术价值,比如反映了现实世界与虚拟世界的关联啥的(反正没有艺术细胞的我是没看懂)。因为之前的木偶戏都是人来手动控制木偶,所以这个工作是一个突破性的工作。
模仿木偶游戏:智能木偶i-marionette做一个动作,之后人来模仿木偶的动作。完成后动作识别系统会给出一个分值,代表刚才的人模仿木偶的相似程度。

1 引言

经典木偶戏:木偶完全由人工控制,人扮演控制者,木偶只能扮演被控者。
交互艺术木偶戏:木偶通过动作识别算法自动模仿人的动作,人也会模仿木偶的动作,便产生了机器与人互相影响的的艺术。作者原文说的是:人类创造技术,技术创造木偶,木偶再影响人类。
在这里插入图片描述
模仿木偶游戏:同样依托于人体动作识别算法。最后系统给模仿者一个打分,分数越高代表模仿者模仿的越像。作者另外提到:人类创造了游戏,人类玩游戏随后游戏影响人类。最终,游戏控制人类(无法理解,不敢恭维)。
识别算法:提出了Action Trait Code (ATC)算法来实现人体动作分类。该方法包含Microsoft Kinect 传感器 并且通过Kinect SDK获得人体3D关节点。ATC通过从每个身体部位的平均速率推导出的一系列特定的速率来代表一个特定的动作。之后基于ATC的分类结果,应用一个有效的图模型学习和识别人体动作。
为了测试该算法的速度,作者在自己收集了一个数据集,该数据集由以Chinese Liyuan dance为主题的6个视频构成。测试结果表明作者的算法达到了实时性的程度。
在这里插入图片描述

2 相关工作

木偶系统领域:
Murphey提出了一种运动描述语言(MDLp) 来encode木偶的动作;Sillam and Luciani创造了一种由钢琴的琴键来控制木偶动作的一套物理模型。
关于面向舞蹈的电子自动木偶领域:
在这里插入图片描述
如图3所示这两种"模仿人"的机器人其实是通过预先设定的实现固定动作的程序来实现的。
人体动作识别和分类算法领域:
之前的一些算法实现了从视频或者图像识别人体动作,但是只能识别横向运动;Sung提出了一种使用3D骨架数据的分层最大熵马尔可夫模型(MEMM)以在非结构化环境中对非结构化人类活动进行人类检测和识别;Raptis提出了一种对舞蹈姿态进行实时分类的系统,由设计好的骨骼表示,级联分类器和一个基于动态时间扭曲的距离度量构成;Jenkins 提出了一种基于机器视觉进行姿态分类和动作识别的方法;Theodoridis在机器人系统中实现了识别攻击性动作的功能。

3 人体动作识别

作者将人体动作理解分为两个方面:一是通过概率模型来实现经典的动作识别任务;二是基于量化人体运动来实现动作分类任务。

3.1 动作识别Overview

整个流程包括三个方面:预处理,动作分类和动作识别。
在这里插入图片描述
预处理:通过Kinect SDK将输入的视频序列转化为人体3D关节点序列。
动作分类:通过ATC[1]来实现人体动作分类。ATC通过从每个身体部位的平均速率推导出的一系列特定的速率来代表一个特定的动作。

ActionRecognition.vue:286 GET http://localhost:3000/api/pose-recognition/action-types 500 (Internal Server Error) dispatchXhrRequest @ xhr.js:195 xhr @ xhr.js:15 dispatchRequest @ dispatchRequest.js:51 Promise.then _request @ Axios.js:163 request @ Axios.js:40 Axios.<computed> @ Axios.js:213 wrap @ bind.js:5 loadActionTypes @ ActionRecognition.vue:286 (匿名) @ ActionRecognition.vue:275 (匿名) @ runtime-core.esm-bundler.js:2879 callWithErrorHandling @ runtime-core.esm-bundler.js:199 callWithAsyncErrorHandling @ runtime-core.esm-bundler.js:206 hook.__weh.hook.__weh @ runtime-core.esm-bundler.js:2859 flushPostFlushCbs @ runtime-core.esm-bundler.js:385 flushJobs @ runtime-core.esm-bundler.js:427 Promise.then queueFlush @ runtime-core.esm-bundler.js:322 queuePostFlushCb @ runtime-core.esm-bundler.js:336 queueEffectWithSuspense @ runtime-core.esm-bundler.js:7411 baseWatchOptions.scheduler @ runtime-core.esm-bundler.js:6286 effect2.scheduler @ reactivity.esm-bundler.js:1853 trigger @ reactivity.esm-bundler.js:265 endBatch @ reactivity.esm-bundler.js:323 notify @ reactivity.esm-bundler.js:614 trigger @ reactivity.esm-bundler.js:588 set value @ reactivity.esm-bundler.js:1471 finalizeNavigation @ vue-router.mjs:3503 (匿名) @ vue-router.mjs:3368 Promise.then pushWithRedirect @ vue-router.mjs:3335 push @ vue-router.mjs:3260 handleMenuItemClick @ menu.ts:166 handleClick @ menu-item.vue:90 callWithErrorHandling @ runtime-core.esm-bundler.js:199 callWithAsyncErrorHandling @ runtime-core.esm-bundler.js:206 invoker @ runtime-dom.esm-bundler.js:729 ActionRecognition.vue:292 加载动作类型失败: AxiosError {message: 'Request failed with status code 500', name: 'AxiosError', code: 'ERR_BAD_RESPONSE', config: {…}, request: XMLHttpRequest, …} loadActionTypes @ ActionRecognition.vue:292 await in loadActionTypes (匿名) @ ActionRecognition.vue:275 (匿名) @ runtime-core.esm-bundler.js:2879 callWithErrorHandling @ runtime-core.esm-bundler.js:199 callWithAsyncErrorHandling @ runtime-core.esm-bundler.js:206 hook.__weh.hook.__weh @ runtime-core.esm-bundler.js:2859 flushPostFlushCbs @ runtime-core.esm-bundler.js:385 flushJobs @ runtime-core.esm-bundler.js:427 Promise.then queueFlush @ runtime-core.esm-bundler.js:322 queuePostFlushCb @ runtime-core.esm-bundler.js:336 queueEffectWithSuspense @ runtime-core.esm-bundler.js:7411 baseWatchOptions.scheduler @ runtime-core.esm-bundler.js:6286 effect2.scheduler @ reactivity.esm-bundler.js:1853 trigger @ reactivity.esm-bundler.js:265 endBatch @ reactivity.esm-bundler.js:323 notify @ reactivity.esm-bundler.js:614 trigger @ reactivity.esm-bundler.js:588 set value @ reactivity.esm-bundler.js:1471 finalizeNavigation @ vue-router.mjs:3503 (匿名) @ vue-router.mjs:3368 Promise.then pushWithRedirect @ vue-router.mjs:3335 push @ vue-router.mjs:3260 handleMenuItemClick @ menu.ts:166 handleClick @ menu-item.vue:90 callWithErrorHandling @ runtime-core.esm-bundler.js:199 callWithAsyncErrorHandling @ runtime-core.esm-bundler.js:206 invoker @ runtime-dom.esm-bundler.js:729 ActionRecognition.vue:300 GET http://localhost:3000/api/dataset/info 500 (Internal Server Error) dispatchXhrRequest @ xhr.js:195 xhr @ xhr.js:15 dispatchRequest @ dispatchRequest.js:51 Promise.then _request @ Axios.js:163 request @ Axios.js:40 Axios.<computed> @ Axios.js:213 wrap @ bind.js:5 loadDatasetInfo @ ActionRecognition.vue:300 (匿名) @ ActionRecognition.vue:276 await in (匿名) (匿名) @ runtime-core.esm-bundler.js:2879 callWithErrorHandling @ runtime-core.esm-bundler.js:199 callWithAsyncErrorHandling @ runtime-core.esm-bundler.js:206 hook.__weh.hook.__weh @ runtime-core.esm-bundler.js:2859 flushPostFlushCbs @ runtime-core.esm-bundler.js:385 flushJobs @ runtime-core.esm-bundler.js:427 Promise.then queueFlush @ runtime-core.esm-bundler.js:322 queuePostFlushCb @ runtime-core.esm-bundler.js:336 queueEffectWithSuspense @ runtime-core.esm-bundler.js:7411 baseWatchOptions.scheduler @ runtime-core.esm-bundler.js:6286 effect2.scheduler @ reactivity.esm-bundler.js:1853 trigger @ reactivity.esm-bundler.js:265 endBatch @ reactivity.esm-bundler.js:323 notify @ reactivity.esm-bundler.js:614 trigger @ reactivity.esm-bundler.js:588 set value @ reactivity.esm-bundler.js:1471 finalizeNavigation @ vue-router.mjs:3503 (匿名) @ vue-router.mjs:3368 Promise.then pushWithRedirect @ vue-router.mjs:3335 push @ vue-router.mjs:3260 handleMenuItemClick @ menu.ts:166 handleClick @ menu-item.vue:90 callWithErrorHandling @ runtime-core.esm-bundler.js:199 callWithAsyncErrorHandling @ runtime-core.esm-bundler.js:206 invoker @ runtime-dom.esm-bundler.js:729 ActionRecognition.vue:303 加载数据集信息失败: AxiosError {message: 'Request failed with status code 500', name: 'AxiosError', code: 'ERR_BAD_RESPONSE', config: {…}, request: XMLHttpRequest, …}
09-30
当在Vue项目中使用Axios请求 `http://localhost:3000/api/pose-recognition/action-types` 和 `http://localhost:3000/api/dataset/info` 接口返回 500 Internal Server Error,通常意味着服务器端在处理请求时发生了错误。可以从以下几个方面进行排查和解决: ### 检查请求配置 - 确认Axios的请求配置是否正确,包括请求方法、请求头、请求参数等。 ```javascript import axios from 'axios'; // 示例请求 axios.get('http://localhost:3000/api/pose-recognition/action-types') .then(response => { console.log(response.data); }) .catch(error => { console.error('请求出错:', error); }); axios.get('http://localhost:3000/api/dataset/info') .then(response => { console.log(response.data); }) .catch(error => { console.error('请求出错:', error); }); ``` ### 检查代理配置 如果项目中使用了代理,确保 `vue.config.js` 中的代理配置正确。可以参考如下配置: ```javascript module.exports = { devServer: { host: '0.0.0.0', port: 8080, // 可根据实际情况修改 open: true, proxy: { '/api': { target: 'http://localhost:3000', changeOrigin: true, pathRewrite: { '^/api': '' } } }, disableHostCheck: true } } ``` 这样在开发环境中,请求 `http://localhost:8080/api/pose-recognition/action-types` 会被代理到 `http://localhost:3000/api/pose-recognition/action-types`。 ### 检查服务器端代码 500 错误通常是服务器端代码抛出异常导致的。检查服务器端代码,查看日志文件,找出具体的错误信息。可能是服务器端代码逻辑错误、数据库连接问题等导致的。 ### 检查跨域问题 确保服务器端设置了正确的跨域请求头。如果服务器使用的是Node.js和Express框架,可以使用 `cors` 中间件来处理跨域问题: ```javascript const express = require('express'); const cors = require('cors'); const app = express(); app.use(cors()); // 其他路由和中间件 app.listen(3000, () => { console.log('服务器运行在端口 3000'); }); ``` ### 检查URL和URI 仔细检查代码中是否存在URL和URI混淆的问题,参考类似问题排查思路,确保代码中没有多余或错误的URL配置,避免像引用[2]中提到的重复配置 `axios.defaults.baseURL` 导致的错误。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值