标签: object-detection

OpenCV FeatureDetector

我正在尝试编写一个应用SURF对象检测的代码,所以我采用了一个openCV示例(示例3)并开始更新onCameraViewStarted()onCameraFrame()方法,但是当我在我的Galaxy S3手机上尝试它时,我一直收到运行时错误找不到任何可以解决我的问题的方法是我的代码和我更新的内容:

public class Sample3Native extends Activity implements CvCameraViewListener{

private static final String TAG = "OCVSample::Activity";

private Mat                    mRgba;
private Mat                    mGrayMat;
private CameraBridgeViewBase   mOpenCvCameraView;

Mat descriptors ;           
List<Mat> descriptorsList;

FeatureDetector featureDetector;
MatOfKeyPoint keyPoints;
DescriptorExtractor descriptorExtractor;
DescriptorMatcher descriptorMatcher;**


private BaseLoaderCallback     mLoaderCallback = new BaseLoaderCallback(this) {
    @Override
    public void onManagerConnected(int status) {
        switch (status) {
            case LoaderCallbackInterface.SUCCESS:
            {
                Log.i(TAG, "OpenCV loaded successfully");

                // Load native library after(!) OpenCV initialization
                System.loadLibrary("native_sample");

                mOpenCvCameraView.enableView();
            } break;
            default:
            { …
Run Code Online (Sandbox Code Playgroud)

java android opencv image-processing object-detection

18
推荐指数
1
解决办法
1万
查看次数

减少误报的最佳策略:谷歌在卫星图像上的新物体检测API

我正在设置新的Tensorflow Object Detection API,以便在大面积的卫星图像中查找小物体.它工作得很好 - 它找到我想要的所有10个对象,但我也得到50-100个误报[看起来有点像目标对象的东西,但不是].

我使用的样本配置"宠物"的教程,以微调的faster_rcnn_resnet101_coco,它们的价格模型.我从小开始,只有100个我的对象训练样例(只有1个类).我的验证集中有50个示例.每个示例都是200x200像素的图像,中心带有标记对象(~40x40).我训练直到我的精确度和损失曲线高原.

我对使用深度学习进行物体检测相对较新.提高精度的最佳策略是什么?例如硬阴性采矿?增加我的训练数据集大小?我还没有尝试他们提供的最准确的模型,faster_rcnn_inception_resnet_v2_atrous_coco因为我想保持一定的速度,但如果需要的话也会这样做.

硬负采矿似乎是合乎逻辑的一步.如果您同意,如何为我的训练数据集设置tfrecord文件?假设我为50-100个误报中的每一个制作200x200图像:

  • 我是否为每个创建'annotation'xml文件,没有'object'元素?
  • ...或者我将这些硬阴性标记为第二类?
  • 如果我在训练集中有100个阴性到100个阳性 - 这是一个健康的比例吗?我可以包含多少负面消息?

machine-learning object-detection computer-vision deep-learning tensorflow

18
推荐指数
1
解决办法
5763
查看次数

TensorFlow对象检测API将图像上的对象打印到控制台

我正在尝试使用TF Object Detection API返回在图像中找到的对象列表.

要做到这一点,我print([category_index.get(i) for i in classes[0]])用来打印已找到的对象列表或print(num_detections)显示已找到对象的数量,但在这两种情况下,它给我列表300个值或[300.]相应的值.

怎么可能只返回图像上的对象?或者,如果有一些错误,请帮助找出问题所在.

我在训练时使用了更快的RCNN模型配置文件和检查点.确保它在图像中确实检测到很少的对象,这里是:

在此输入图像描述

我的代码:

import numpy as np
import os
import six.moves.urllib as urllib
import sys
import tarfile
import tensorflow as tf
import zipfile

from collections import defaultdict
from io import StringIO
from matplotlib import pyplot as plt
from PIL import Image

from object_detection.utils import label_map_util
from object_detection.utils import visualization_utils as vis_util

PATH_TO_CKPT = 'frozen_graph/frozen_inference_graph.pb'

PATH_TO_LABELS = 'object_detection/pascal_label_map.pbtxt'

NUM_CLASSES = 7

detection_graph …
Run Code Online (Sandbox Code Playgroud)

python machine-learning object-detection tensorflow

18
推荐指数
2
解决办法
6372
查看次数

Mobilenet与SSD

我在mobilenet和SSD之间有些困惑。据我所知,mobilenet是用于分类和识别的神经网络,而SSD是用于实现多盒检测器的框架。只有两者结合才能进行对象检测。因此,移动网络可以与resnet,inception等互换。SSD可以与RCNN互换。我的陈述正确吗?

machine-learning object-detection neural-network

18
推荐指数
1
解决办法
1万
查看次数

一级与两级物体检测

我正在阅读YOLOv4论文,该论文经常使用术语“一级和二级目标检测”。我无法理解这两种类型的物体探测器之间有什么区别。我假设

  • 一个阶段仅使用一个网络同时进行区域检测和对象分类
  • 两个阶段使用 2 个不同的网络执行上述操作

这个假设正确吗?

artificial-intelligence machine-learning object-detection computer-vision yolo

16
推荐指数
2
解决办法
2万
查看次数

物体检测+分割

我试图找到一种可接受的复杂性的有效方法

  • 检测图像中的对象,以便将其与周围环境隔离开来
  • 将对象分段到其子部分并标记它们,以便我可以随意获取它们

自从我进入图像处理世界已经有3个星期了,我已经阅读过如此多的算法(筛选,蛇,更多蛇,与傅里叶相关等),以及我不知道从何处开始的启发式算法和哪一个算法对于我想要达到的目标来说,它是"最好的".考虑到感兴趣的图像数据集非常大,我甚至不知道是否应该使用在OpenCV中实现的某些算法,或者我是否应该实现自己的算法.

总结:

  • 我应该关注哪种方法?为什么?
  • 我应该将OpenCV用于那种东西,还是有其他"更好"的选择?

先感谢您.

编辑 - 有关数据集的更多信息

每个数据集由共享相同的80K产品图像组成

  • 概念,例如T恤,手表,鞋子
  • 尺寸
  • 方向(90%)
  • 背景(95%)

显然,每个数据集中的所有图片看起来几乎与产品本身完全相同.为了使事情更加清晰,我们只考虑"监视数据集":

集合中的所有图片看起来几乎都是这样的:

在此输入图像描述

(再次,除了手表本身).我想提取表带和表盘.事实上,有许多不同的手表风格,因此形状.从我到目前为止所读到的,我认为我需要一种模板算法,允许弯曲和拉伸,以便能够匹配不同风格的带子和表盘.

而不是创建三个不同的模板(表带的上半部分,表带的下部,表盘),仅创建一个并将其分成3个部分是合理的.这样,我就可以确信每个部件都是相互检测到的,例如在表带的下部不会检测到表盘.

从我遇到的所有算法/方法中,活跃的形状模型似乎是最有希望的.不幸的是,我没有设法找到一个下降实现,我不能确信这是最好的方法,以便继续自己写一个.

如果有人能指出我应该寻找的东西(算法/启发式/库/等),我会非常感激.如果您再次认为我的描述有点模糊,请随时要求更详细的描述.

opencv image image-processing object-detection

15
推荐指数
1
解决办法
2738
查看次数

如何使用opencv检测大量白色像素的区域?

我想检测图像中的徽标以便将其删除,我有一个想法,即寻找具有大量像素然后移除的对象,另一个想法是遍历所有白色像素(我已经颠倒了我的图像)和寻找形成一个大区域的像素,然后删除这个区域,是否有任何算法比这更好,opencv中的哪些方法将帮助我检测大像素数的对象.

c++ opencv image-processing object-detection

15
推荐指数
1
解决办法
4万
查看次数

使用OpenCV进行矩形检测/跟踪

我需要的

我目前正致力于增强现实游戏.游戏使用的控制器(我在这里谈论的是物理输入设备)是单色的,长方形的纸片.我必须在摄像机的捕获流中检测该矩形的位置,旋转和大小.检测应在尺度上不变,并且在沿X和Y轴旋转时不变.

在用户将纸张移开或朝向相机移动的情况下,需要比例不变性.我不需要知道矩形的距离,因此尺度不变性转换为尺寸不变性.

如果用户沿其局部X和/或Y轴倾斜矩形,则需要旋转不变性.这种旋转将纸张的形状从矩形变为梯形.在这种情况下,面向对象的边界框可用于测量纸张的尺寸.

我做了什么

开始时有一个校准步骤.窗口显示摄像机源,用户必须单击矩形.单击时,鼠标指向的像素颜色将作为参考颜色.帧被转换为HSV颜色空间以改善颜色区分.我有6个滑块可以调整每个通道的上限和下限.这些阈值用于对图像进行二值化(使用opencv inRange函数).
在那之后,我正在侵蚀和扩展二进制图像以消除噪声并联合nerby块(使用opencv erodedilate函数).
下一步是findContours在二进制图像中查找轮廓(使用opencv 函数).这些轮廓用于检测最小的方向矩形(使用opencv minAreaRect函数).作为最终结果,我正在使用面积最大的矩形.

该程序的简短结论:

  1. 抓住一个框架
  2. 将该帧转换为HSV
  3. 将其二值化(使用用户选择的颜色和滑块的阈值)
  4. 应用变形操作(侵蚀和扩张)
  5. 查找轮廓
  6. 获得每个轮廓最小的定向bouding盒
  7. 取结果中最大的边界框

您可能已经注意到,我没有利用有关纸张实际形状的知识,仅仅因为我不知道如何正确使用这些信息.

我也考虑过使用opencv的跟踪算法.但有三个原因使我无法使用它们:

  1. 比例不变性:据我读到的一些算法,有些不支持对象的不同比例.
  2. 运动预测:一些算法使用运动预测来获得更好的性能,但我跟踪的对象完全随机移动,因此无法预测.
  3. 简单:我只是在图像中寻找单色矩形,没有像汽车或人物跟踪那样花哨的东西.

这是一个 - 相对 - 好的捕获(侵蚀和扩张后的二进制图像) 好

这是一个糟糕的 坏

问题

如何提高检测效果,尤其是更能抵抗照明变化?

更新

以下是一些用于测试的原始图像.

你不能只使用更厚的材料吗?
是的,我可以而且我已经做过了(不幸的是我现在无法访问这些内容).但问题仍然存在.即使我使用像cartboard这样的材料.它不像纸一样容易弯曲,但仍然可以弯曲它.

你如何获得矩形的大小,旋转和位置?opencv
minAreaRect功能返回一个RotatedRect对象.该对象包含我需要的所有数据.

注意
由于矩形是单色的,因此无法区分顶部和底部或左右.这意味着旋转始终在[0, 180]我的目的范围内完全正常.矩形两边的比例总是如此w:h > 2:1.如果矩形是方形,则旋转范围将变为[0, 90],但这可以认为是无关紧要的.

正如评论中所建议的那样,我将尝试使用直方图均衡来减少亮度问题并查看ORB,SURF和SIFT.

我会更新进展情况.

c++ opencv image-processing object-detection

15
推荐指数
2
解决办法
8853
查看次数

我应该使用什么样的描述符进行密封幼仔检测?

我有一个项目来检测和计算从海滩拍摄的航拍图像中的密封幼崽(动物).与成年海豹相比,海豹幼崽是黑色和小的,棕色和大.

一些密封箱重叠/部分遮挡.海滩颜色接近黄色但是有一些黑色的岩石增加了探测难度.

什么样的描述符最适合我的项目?HOG,SIFT,Haar一样的功能?

我在问这个问题的理论部分.我想要实现我的项目,第一步应该选择能够最能代表对象的正确描述符,然后(结合几个弱特征,不是必要的?)使用机器学习方法训练分类器,如boost/SVM/neural_network,我是对的?

示例图片: 在此输入图像描述

opencv image-processing object-detection computer-vision

14
推荐指数
1
解决办法
696
查看次数

如何在滑动窗口对象检测中对True Negative进行分类?

我正在从我的图像检测器算法中收集结果.所以基本上我所做的是,从一组图像(大小为320 x 480),我将通过它运行一个64x128的滑动窗口,并且还在许多预定义的比例下运行.

我明白那个:

  • True Positives =当我检测到的窗口与地面实况(带注释的边界框)重叠(在定义的交叉点大小/质心内)时
  • 误报=当算法给出正面窗口时,这些窗口超出了真实性.
  • 假阴性=当我没有给出正窗口时,而地面实况注释表明存在一个对象.

真正的否定者呢?这些真正的否定因为我的分类器给了我负面结果的所有窗口吗?这听起来很奇怪,因为我一次将一个小窗口(64x128)滑动4个像素,并且我在检测中使用了大约8个不同的比例.如果我这样做,那么每张图片都会有很多真正的底片.

或者我准备一组纯负面图像(根本没有物体/人物),我只是滑动,如果这些图像中有一个或多个正面检测,我会将其视为假阴性,副反之?

这是一个示例图像(绿色作为基本事实)

示例图像,不是真实结果

opencv machine-learning object-detection computer-vision

14
推荐指数
1
解决办法
4200
查看次数