当前位置:网站首页>视频数据标注工具与平台(数据标注公司)
视频数据标注工具与平台(数据标注公司)
2022-06-23 11:15:00 【扬起】
视频数据标注平台(标注外包公司)
数据标注公司的工作比较多样,但视频标注对工具要求稍高一些,能在线上做的平台不是特别多,主要还是语音、图片标注。目前这个行业良莠不齐,有的平台技术实力强,有品牌背景,比如京东众智、百度众包,数据保密做得好。有的平台是专门做代理的,你的数据需求交给他,他转手就分包给下一层。下面介绍几个平台,也综合了其他博主的一些意见,如下:
京东众智
标注质量比较高,项目交付准时,数据隔离方案可以不出自己的服务器完成标注,比较重视客户的数据安全。也提供私有化部署服务。
百度众测
标注能力比较广泛,百度进入标注行业比较久,积累了较多的众包用户。不过我不看好众包模式,因为质量比较难把控。
figure-eight
国外知名的数据标注平台,国外好多大公司都与它有合作。需求方可以自行配置标注工具和相应的label,直接在平台上发任务,没有客户经理沟通…这可能对国内客户不太友好。
视频数据标注工具
CDVA
CDVA(compact descriptor for video analysis),主要是基于CDVS中的紧凑视觉描述子来做视频分析,之前是紧凑视觉描述子主要应用在图像检索领域。需要制作新的数据集,对视频帧进行标注,所以根据网上一个博主的标注工具进行了一定的修改,实现的功能是在每一帧中将需要标注的区域用鼠标选取4个点,顺序是顺时针。因为四边形的范围更广,之前的一些人直接标注了矩形,但是在一些仿射变换中,往往矩形的定位效果不好,矩形定位应该比较适合于人脸定位和行人定位之中。 http://www.cnblogs.com/louyihang-loves-baiyan/p/4457462.html
视频标注工具
由于实验室里面需要做CDVA的标准,CDVA(compact descriptor for video analysis),主要是基于CDVS中的紧凑视觉描述子来做视频分析,之前是紧凑视觉描述子主要应用在图像检索领域。需要制作新的数据集,对视频帧进行标注,所以根据网上一个博主的标注工具进行了一定的修改,实现的功能是在每一帧中将需要标注的区域用鼠标选取4个点,顺序是顺时针。因为四边形的范围更广,之前的一些人直接标注了矩形,但是在一些仿射变换中,往往矩形的定位效果不好,矩形定位应该比较适合于人脸定位和行人定位之中。
这些代码都是基于openCV的,因此在工程配置的时候需要天机opencv的库路径和头文件路径。 这里简单的介绍一下这个工具的用法
- 首先运行这个应用程序可以看到一个黑框和一个Video窗口
- 选取需要标注的区域,按照顺时针,画出4个点(此工具的写的时候默认是每帧图像画一个,不考虑多个情况,如果你要标注多个,就可以添加一个数组存取每个四边形的区域
- 在画的时候若是点错了地方需求进一步修正则按 'z'即可,按下‘z’可以回退一个点,若画完4个点感觉还是不满意,也可以直接按下'c'全部清除
- 当确定矩形区域之后,按下‘n’,就会将这些数据写入到指定的txt文件中,同时将进入下一帧
- 由于视频中连续帧的变化不好,特别是镜头停止的时候,因此,为了避免重复画目标区域,上一帧的四边形坐标会自动的画在下一帧中,若需要重新画,按下‘c’,即可,若不需要重新画,按下'n'即会写入文件,同时继续下一帧,如此往复
在写入的txt文件中,一行代表一帧中的数据,第一个数为帧数,后4个数,分别是画矩形时依次点入的4个坐标值。 你可以根据自己的需求,修改这份代码,希望对大家能有所帮助。
/********************************************************************
created: 2015/04/18
created: 18:4:2015 17:24
filename: D:\WorkSpace\VS_Projects\VideoLabel\VideoLabel_Quadrilateral\video_label_quadrilateral.cpp
file path: D:\WorkSpace\VS_Projects\VideoLabel\VideoLabel_Quadrilateral
file base: video_label_quadrilateral
file ext: cpp
author: Yihang Lou
purpose: draw the quadrilateral labels in the frame captured from video
*********************************************************************/
#include "opencv2/opencv.hpp"
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
using namespace std;
using namespace cv;
// Global variables
Mat img_original, img_drawing;
Point quad [4];
//the value of pointNum is between 0~4
static int pointNum = 0;
/*************************************************
// Method: help
// Description: describe the usage
// Author: Yihang Lou
// Date: 2015/04/18
// Returns: void
// History:
*************************************************/
static void help()
{
cout << "This program designed for labeling video \n"
"Only if you press the 'n' the present quadrilateral data will be written into txt file\n";
cout << "Hot keys: \n"
"\tESC - quit the program\n"
"\tn - next frame of the video\n"
"\tz - undo the last label point \n"
"\tc - clear all the labels\n"
<< endl;
}
/*************************************************
// Method: drawQuadri
// Description:
// Author: Yihang Lou
// Date: 2015/04/18
// Returns: void
// Parameter: quad the point of Point array
// History:
*************************************************/
static void drawQuadri (Point * quad) {
for(int i = 0; i < 4; i++)
{
line(img_drawing,quad[i],quad[(i+1)%4],Scalar(0,255,0),1,8,0);
}
}
/*************************************************
// Method: onMouse
// Description: do the actions after onMouse event is called
// Author: Yihang Lou
// Date: 2015/04/18
// Returns: void
// Parameter: event
// Parameter: x Mouse's coordinate
// Parameter: y
// History:
*************************************************/
static void onMouse(int event, int x, int y, int, void*)
{
switch (event)
{
case CV_EVENT_LBUTTONDOWN:
quad[pointNum%4].x = x;
quad[pointNum%4].y = y;
cout<<"x = "<<x<<" y = "<<y<<endl;
pointNum++;
break;
case CV_EVENT_LBUTTONUP:
//finish drawing the rect (use color green for finish)
circle(img_drawing,cvPoint(x,y),1,Scalar(0, 255, 0),1,8,0);
if(pointNum == 4)
{
pointNum = 0;
cout<<"draw quadri line"<<endl;
drawQuadri(quad);
}
break;
}
imshow("Video", img_drawing);
return;
}
/*************************************************
// Method: isempty
// Description: check the quad is empty
// Author: Yihang Lou
// Date: 2015/04/18
// Returns: int
// Parameter: quad
// History:
*************************************************/
int isempty(Point * quad)
{
for (int i = 0 ; i < 4; i++)
{
if (quad[i].x !=0 || quad[i].y !=0 )
{
return 0;
}
}
return 1;
}
int main(){
namedWindow("Video");
ofstream outfile("1.txt");
help();
VideoCapture capture("1.avi");
capture >> img_original;
img_original.copyTo(img_drawing);
imshow("Video", img_original);
setMouseCallback("Video", onMouse, 0);
int frame_counter = 0;
while (1){
int c = waitKey(0);
if ((c & 255) == 27)
{
cout << "Exiting ...\n";
break;
}
switch ((char)c)
{
case 'n':
//read the next frame
++frame_counter;
capture >> img_original;
if (img_original.empty()){
cout << "\nVideo Finished!" << endl;
return 0;
}
img_original.copyTo(img_drawing);
if (!isempty(quad))
{
drawQuadri(quad);
outfile << frame_counter << " " << quad[0].x << " "<< quad[0].y << " "
<< quad[1].x << " "<< quad[1].y << " "
<< quad[2].x << " "<< quad[2].y << " "
<< quad[3].x << " "<< quad[3].y << " "<<endl;
}
break;
case 'z':
//undo the latest labeling point
if(pointNum == 0)
{
cout<<"if you want to clear the existent quad please press 'c'"<<endl;
break;
}
pointNum--;
quad[pointNum].x=0;
quad[pointNum].y=0;
img_original.copyTo(img_drawing);
for(int i = 0 ; i < pointNum; i++)
{
circle(img_drawing,quad[i],1,Scalar(0, 255, 0),1,8,0);
}
break;
case 'c':
//clear quad array
memset(quad,0,4*sizeof(Point));
img_original.copyTo(img_drawing);
}
imshow("Video", img_drawing);
}
return 0;
}VoTT
微软发布的可视化图像/视频标记工具。能够标记和注释图像目录或独立视频。使用 Camshift 跟踪算法辅助计算机标记和跟踪视频中的物体。将标签和资源导出到 Custom Vision Service CNTK,Tensorflow(PascalVOC)或YOLO 格式,用于训练对象检测模型。 https://github.com/Microsoft/VoTT
vatic
视频标注工具(vatic)
1.安装(基于Ubuntu16.04)
$ sudo pip install cython==0.20
$ wget http://mit.edu/vondrick/vatic/vatic-install.sh
$ chmod +x vatic-install.sh
$ ./vatic-install.sh
$ cd vaticvatic-install.sh可能下载不了,vatic-install下载
2.配置HTTP Serve
/etc/apache2/sites-enabled/000-default.conf替换为:
WSGIDaemonProcess www-data python-eggs=/home/cmcross/.python-eggs
WSGIProcessGroup www-data
<VirtualHost *:80>
ServerName 0.0.0.0
DocumentRoot /home/cmcross/vatic/public
WSGIScriptAlias /server /home/cmcross/vatic/server.py
CustomLog /var/log/apache2/access.log combined
</VirtualHost>启用mod_headers模块:
$ sudo cp /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled重启Apache:
$ sudo apache2ctl graceful3.配置SQL
创建vatic数据库:
$ mysql -u root
mysql> create database vatic;如果登录需要密码,密码是hail_ukraine,修改root用户为无密码状态,否则会报错,如果是上面我的csdn下载的,密码是root
更新mysql root为无密码
update user set authentication_string=PASSWORD("") where User='root';
update user set plugin="mysql_native_password";
flush privileges; #更新所有操作权限
quit;启动:
$ cp config.py-example config.py如果需要上线服务,修改access相应选项,离线服务可以跳过
初始化数据库:
$ turkic setup --database重启数据库:
$ turkic setup --database --reset允许vatic访问turkic:
$ turkic setup --public-symlink4.验证是否安装正确
$ turkic status --verify如果您收到任何错误消息,则表示安装未完成。
注意:不打算使用Mechanical Turk,忽略由Mechanical Turk引起的任何错误。
ERROR:
Localhost: http://localhost/
Testing access to Amazon Mechanical Turk... ERROR! Signature or access key missing
Testing access to database server... OK
Testing access to web server... ERROR! HTTP Error 403: Forbidden
One or more tests FAILED!解决:修改Apache配置/etc/apache2/apache2.conf添加
<Directory /home/cmcross/vatic/public>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>重启后解决问题$ sudo apache2ctl graceful5.示例
视频取帧
$ mkdir /path/to/output/directory
$ turkic extract /path/to/video.mp4 /path/to/output/directory宽高属性采用:--width 1000 --height 1000或者--no-resize
$ turkic extract /path/to/video.mp4 /path/to/output/directory --width 1000 --height 1000已经取好的视频帧可通过命令转化为vatic的格式
$ turkic formatframes /path/to/frames/ /path/to/output/directory导入视频(离线)
$ turkic load identifier /path/to/output/directory Label1 ~Attr1A ~Attr1B
Label2 ~Attr2A ~Attr2B ~Attr2C Label3 --offlineidentifier为表示符,Label1将具有属性Attr1A和Attr1B,Label2将具有属性Attr2B,Attr2B和Attr2C,并且Label3将不具有属性。 指定属性是可选的
pulish视频(离线)
$ turkic publish --offlineERROR:publish后打开http://localhost?id=1&hitId=offline网址显示Server Error
解决方法:在/etc/apache2/sites-enabled/000-default.conf添加
<Directory /path/to/vatic>
<Files server.py>
Require all granted
</Files>
</Directory>导出voc格式数据集
$ turkic dump identifier -o /output --pascal --pascal-skip 1–pascal-skip:多少帧取一次数据,不加这个属性默认为15帧取一次
更多的参数参考Github:https://github.com/cvondrick/vatic
边栏推荐
- 安卓安全/逆向面试题
- 一年多时间时移世易,中国芯片不断突破,美国芯片却难以卖出
- ESP32-CAM高性价比温湿度监控系统
- The simplest DIY actuator controller based on 51 single chip microcomputer
- PHP regular expression
- Tensorrt笔记(四)推理分割模型
- Whether Changan Lumin has the ability to become a broken product in the micro electricity market
- 成熟的知识管理,应具备哪些条件?
- 过采样系列一:采样定理与过采样率
- Simplest DIY mpu6050 gyroscope attitude control actuator program based on stm32f407 Explorer development board
猜你喜欢

最简单DIY基于51单片机的舵机控制器

ESP32-CAM无线监控智能网关的设计与实现

How Huawei cloud implements a global low latency network architecture for real-time audio and video

After repeated pressure, Apple may significantly increase the price of iphone14

Rancher 2.6 new monitoring QuickStart

Flutter series: wrap in flutter

How to write a literature review? What should I do if I don't have a clue?

“芯”有灵“蜥”,万人在线!龙蜥社区走进 Intel MeetUp 精彩回顾

Simplest DIY steel patriot machine gun controller based on Bluetooth, 51 MCU and steering gear

tensorflow2的GradientTape求梯度
随机推荐
Vone新闻 | 旺链科技赋能众享链网自组织管理,打造企业级联盟DAO
From 0 to 1, how does the IDE improve the efficiency of end-to-end R & D| DX R & D mode
"Internet +" contest topic hot docking | I figure to understand 38 propositions of Baidu
Simplest DIY remote control computer system based on STM32 ② (wireless remote control + key control)
消息队列的丢失、重复与积压问题
Noi OJ 1.3 16: calculating segment length C language
Rancher 2.6 全新 Monitoring 快速入门
如何用 Redis 实现一个分布式锁
坦然面对未来,努力提升自我
After repeated pressure, Apple may significantly increase the price of iphone14
Noi OJ 1.3 15: apple and bug C language
Design and implementation of stm32f103zet6 single chip microcomputer dual serial port mutual sending program
DevEco Device Tool 助力OpenHarmony設備開發
Runtime application self-protection (rasp): self-cultivation of application security
Introduction to Huawei cloud maintenance and sharing exchange platform
Argmax function notes - full of details
分享一个手游脚本源码
Force buckle 1319 Number of connected network operations
[use of Matlab graphical user interface controls]
最简单DIY基于蓝牙、51单片机和舵机的钢铁爱国者机关枪控制器