数据标注的软件从哪里弄

数据标注的软件从哪里弄,第1张

数据标注工具Labelme,可以去官方渠道下载。

Labelme支持对图像进行多边形、矩形、圆、折线,点形式的标注,可用于目标检测,语义分割,图像分类等任务。作为一款开源工具,labelme布局简单、但安装部署繁琐、数据管理困难,仅支持JSON格式输出。

LabelImg 是国外的一款图像标注工具。使用前需要提前配置环境 python + lxml。Faster R-CNN,YOLO,SSD等对象检测所需要的数据集。数据集管理和打开方式较困难,想用labelImg需要在pythonlabelImg.py打开一个标注的图形界面,在open_dir处打开images所在的文件夹,在 change save dir打开 annotations 文件夹,才能开始标注,labelImg的导出仅支持 XML 格式,导出文件格式为一张图片与一个 XML 文件对应。

代码 1)Two-pass算法的一种实现说明:基于OpenCV和C++实现,领域:4-领域。实现与算法描述稍有差别(具体为记录具有相等关系的label方法实现上)。 // Connected Component Analysis/Labeling By Two-Pass Algorithm // Author: www.icvpr.com// Blog : http://blog.csdn.net/icvpr #include <iostream> #include <string> #include <list> #include <vector> #include <map> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> void icvprCcaByTwoPass(const cv::Mat&_binImg, cv::Mat&_lableImg) { // connected component analysis (4-component) // use two-pass algorithm // 1. first pass: label each foreground pixel with a label // 2. second pass: visit each labeled pixel and merge neighbor labels // // foreground pixel: _binImg(x,y) = 1 // background pixel: _binImg(x,y) = 0 if (_binImg.empty() || _binImg.type() != CV_8UC1) { return }// 1. first pass_lableImg.release() _binImg.convertTo(_lableImg, CV_32SC1)int label = 1 // start by 2 std::vector<int>labelSet labelSet.push_back(0) // background: 0 labelSet.push_back(1) // foreground: 1int rows = _binImg.rows - 1 int cols = _binImg.cols - 1 for (int i = 1i <rowsi++) { int* data_preRow = _lableImg.ptr<int>(i-1) int* data_curRow = _lableImg.ptr<int>(i) for (int j = 1j <colsj++) { if (data_curRow[j] == 1) { std::vector<int>neighborLabels neighborLabels.reserve(2) int leftPixel = data_curRow[j-1] int upPixel = data_preRow[j] if ( leftPixel >1) { neighborLabels.push_back(leftPixel) } if (upPixel >1) { neighborLabels.push_back(upPixel) }if (neighborLabels.empty()) { labelSet.push_back(++label) // assign to a new label data_curRow[j] = label labelSet[label] = label } else { std::sort(neighborLabels.begin(), neighborLabels.end()) int smallestLabel = neighborLabels[0]data_curRow[j] = smallestLabel// save equivalence for (size_t k = 1k <neighborLabels.size()k++) { int tempLabel = neighborLabels[k] int&oldSmallestLabel = labelSet[tempLabel] if (oldSmallestLabel >smallestLabel) { labelSet[oldSmallestLabel] = smallestLabel oldSmallestLabel = smallestLabel } else if (oldSmallestLabel <smallestLabel) { labelSet[smallestLabel] = oldSmallestLabel } } } } } }// update equivalent labels // assigned with the smallest label in each equivalent label set for (size_t i = 2i <labelSet.size()i++) { int curLabel = labelSet[i] int preLabel = labelSet[curLabel] while (preLabel != curLabel) { curLabel = preLabel preLabel = labelSet[preLabel] } labelSet[i] = curLabel } // 2. second pass for (int i = 0i <rowsi++) { int* data = _lableImg.ptr<int>(i) for (int j = 0j <colsj++) { int&pixelLabel = data[j] pixelLabel = labelSet[pixelLabel] } } } 2)Seed-Filling种子填充方法说明:基于OpenCV和C++实现;领域:4-领域。 // Connected Component Analysis/Labeling By Seed-Filling Algorithm // Author: www.icvpr.com// Blog : http://blog.csdn.net/icvpr #include <iostream> #include <string> #include <list> #include <vector> #include <map> #include <stack> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> void icvprCcaBySeedFill(const cv::Mat&_binImg, cv::Mat&_lableImg) { // connected component analysis (4-component) // use seed filling algorithm // 1. begin with a foreground pixel and push its foreground neighbors into a stack // 2. pop the top pixel on the stack and label it with the same label until the stack is empty // // foreground pixel: _binImg(x,y) = 1 // background pixel: _binImg(x,y) = 0 if (_binImg.empty() || _binImg.type() != CV_8UC1) { return }_lableImg.release() _binImg.convertTo(_lableImg, CV_32SC1)int label = 1 // start by 2int rows = _binImg.rows - 1 int cols = _binImg.cols - 1 for (int i = 1i <rows-1i++) { int* data= _lableImg.ptr<int>(i) for (int j = 1j <cols-1j++) { if (data[j] == 1) { std::stack<std::pair<int,int>>neighborPixels neighborPixels.push(std::pair<int,int>(i,j)) // pixel position: <i,j> ++label // begin with a new label while (!neighborPixels.empty()) { // get the top pixel on the stack and label it with the same label std::pair<int,int>curPixel = neighborPixels.top() int curX = curPixel.first int curY = curPixel.second _lableImg.at<int>(curX, curY) = label// pop the top pixel neighborPixels.pop()// push the 4-neighbors (foreground pixels) if (_lableImg.at<int>(curX, curY-1) == 1) {// left pixel neighborPixels.push(std::pair<int,int>(curX, curY-1)) } if (_lableImg.at<int>(curX, curY+1) == 1) {// right pixel neighborPixels.push(std::pair<int,int>(curX, curY+1)) } if (_lableImg.at<int>(curX-1, curY) == 1) {// up pixel neighborPixels.push(std::pair<int,int>(curX-1, curY)) } if (_lableImg.at<int>(curX+1, curY) == 1) {// down pixel neighborPixels.push(std::pair<int,int>(curX+1, curY)) } } } } } } 3)颜色标记(用于显示) // Connected Component Analysis/Labeling -- Color Labeling // Author: www.icvpr.com// Blog : http://blog.csdn.net/icvpr #include <iostream> #include <string> #include <list> #include <vector> #include <map> #include <stack> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> cv::Scalar icvprGetRandomColor() { uchar r = 255 * (rand()/(1.0 + RAND_MAX)) uchar g = 255 * (rand()/(1.0 + RAND_MAX)) uchar b = 255 * (rand()/(1.0 + RAND_MAX)) return cv::Scalar(b,g,r) } void icvprLabelColor(const cv::Mat&_labelImg, cv::Mat&_colorLabelImg) { if (_labelImg.empty() || _labelImg.type() != CV_32SC1) { return }std::map<int, cv::Scalar>colorsint rows = _labelImg.rows int cols = _labelImg.cols_colorLabelImg.release() _colorLabelImg.create(rows, cols, CV_8UC3) _colorLabelImg = cv::Scalar::all(0)for (int i = 0i <rowsi++) { const int* data_src = (int*)_labelImg.ptr<int>(i) uchar* data_dst = _colorLabelImg.ptr<uchar>(i) for (int j = 0j <colsj++) { int pixelValue = data_src[j] if (pixelValue >1) { if (colors.count(pixelValue) <= 0) { colors[pixelValue] = icvprGetRandomColor() } cv::Scalar color = colors[pixelValue] *data_dst++ = color[0] *data_dst++ = color[1] *data_dst++ = color[2] } else { data_dst++ data_dst++ data_dst++ } } } } 4)测试程序 // Connected Component Analysis/Labeling -- Test code // Author: www.icvpr.com// Blog : http://blog.csdn.net/icvpr #include <iostream> #include <string> #include <list> #include <vector> #include <map> #include <stack> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> int main(int argc, char** argv) { cv::Mat binImage = cv::imread("../icvpr.com.jpg", 0) cv::threshold(binImage, binImage, 50, 1, CV_THRESH_BINARY_INV)// connected component labeling cv::Mat labelImg icvprCcaByTwoPass(binImage, labelImg) //icvprCcaBySeedFill(binImage, labelImg)// show result cv::Mat grayImg labelImg *= 10 labelImg.convertTo(grayImg, CV_8UC1) cv::imshow("labelImg", grayImg)cv::Mat colorLabelImg icvprLabelColor(labelImg, colorLabelImg) cv::imshow("colorImg", colorLabelImg) cv::waitKey(0)return 0 }

问题原因:import scapy后执行脚本调用scapy模块中(默认自动加了.py后缀)优先找了当前目录的man.py,因为两文件不一样(一个是我们引入别人写好的库文件,一个是我们自己创建的文件),所以就报错了。

一、如果一个错误出现后没有被捕获(捕获是什么先不管,现在就理解为出现了一个错误),它就一直被往上抛,最终将被Python解释器捕获。然后就在本该输出结果的地方打印一大串错误信息,然后程序退出。示例代码如下:

二、示例代码执行后结果如下:

三、解读错误信息就可以定位错误:

四、更换python版本3.6.1,pandas版本依然为0.20.2,不过python版本不一样代码略有不同。

1、去Chrome网页链接,下载解压后,将chromedriver.exe 放到Python的安装目录即可。

五、修改mv scapy.py abc.py问题解决。

1、转换cmd命令:chcp 65001,也就是将cmd转化为utf-8。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7991199.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-12
下一篇2023-04-12

发表评论

登录后才能评论

评论列表(0条)

    保存