当前位置:网站首页>视频数据标注工具与平台(数据标注公司)
视频数据标注工具与平台(数据标注公司)
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
边栏推荐
- list的深度剖析及模拟实现
- 【黄金分割点】与【斐波那契数列】
- 实战监听Eureka client的缓存更新
- 证券开户网上安全度高吗
- 最简单DIY基于蓝牙、51单片机和舵机的钢铁爱国者机关枪控制器
- Flutter series: wrap in flutter
- Introduction to Huawei cloud maintenance and sharing exchange platform
- 中国十大券商有哪些?手机开户安全么?
- Installation and use of binabsinspector, an open source binary file static vulnerability analysis tool
- 单向链表实现--计数
猜你喜欢

Maui uses Masa blazor component library

Analysis of LinkedList source code

力扣 1319. 连通网络的操作次数

Android security / reverse interview questions

flutter系列之:flutter中的Wrap

New technology aesthetics and original biological networking operating system reshape the whole house intelligence

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

What does NFTs, Web3 and metauniverse mean for digital marketing?

Why does the pointer not change the corresponding value as a formal parameter

Deveco device tool helps openharmony device development
随机推荐
互联网奇迹-小米究竟是怎么盈利
Implement common C language string processing functions
[use of Matlab graphical user interface controls]
Esp32-cam, esp8266, WiFi, Bluetooth, MCU, hotspot create embedded DNS server
Design and implementation of esp32-cam wireless monitoring intelligent gateway
长安LUMIN是否有能力成为微电市场的破局产品
How Huawei cloud implements a global low latency network architecture for real-time audio and video
Noi OJ 1.4 04: odd even ASCII value judgment C language
Gradienttape of tensorflow2
华为云·维享会交流平台简介
Analysis of LinkedList source code
Design and implementation of stm32f103zet6 single chip microcomputer dual serial port mutual sending program
【云舟说直播间】-数字安全专场明天下午正式上线
成熟的知识管理,应具备哪些条件?
Introduction to Huawei cloud maintenance and sharing exchange platform
Maui uses Masa blazor component library
Is it difficult to register stocks and open accounts online? Is it safe to open an account online now?
Flush is the stock market? Is online account opening safe?
Noi OJ 1.3 16: calculating segment length C language
最简单DIY基于STM32的远程控制电脑系统①(电容触摸+按键控制)