小编Ult*_*let的帖子

OpenCV-Python中的简单数字识别OCR

我正在尝试在OpenCV-Python(cv2)中实现"数字识别OCR".它仅用于学习目的.我想在OpenCV中学习KNearest和SVM功能.

我有每个数字的100个样本(即图像).我想和他们一起训练.

letter_recog.pyOpenCV示例附带了一个示例.但我仍然无法弄清楚如何使用它.我不明白什么是样本,响应等.另外,它首先加载一个txt文件,我首先不明白.

稍后搜索一下,我可以在cpp示例中找到一个letter_recognition.data.我使用它并在letter_recog.py模型中为cv2.KNearest创建了一个代码(仅用于测试):

import numpy as np
import cv2

fn = 'letter-recognition.data'
a = np.loadtxt(fn, np.float32, delimiter=',', converters={ 0 : lambda ch : ord(ch)-ord('A') })
samples, responses = a[:,1:], a[:,0]

model = cv2.KNearest()
retval = model.train(samples,responses)
retval, results, neigh_resp, dists = model.find_nearest(samples, k = 10)
print results.ravel()
Run Code Online (Sandbox Code Playgroud)

它给了我一个20000的数组,我不明白它是什么.

问题:

1)letter_recognition.data文件是什么?如何从我自己的数据集构建该文件?

2)什么results.reval()表示?

3)我们如何使用letter_recognition.data文件(KNearest或SVM)编写简单的数字识别工具?

python ocr opencv numpy computer-vision

370
推荐指数
3
解决办法
21万
查看次数

在自己的数据集上训练Tensorflow对象检测

在花了几天试图完成这项任务之后,我想分享一下我如何回答这个问题的经验:

如何使用TS对象检测来训练使用我自己的数据集?

machine-learning object-detection tensorflow

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

Tensorflow服务在基本路径下找不到可维护<MODEL>的版本

我正在按照教程tensorflow serving使用我的对象检测模型.我正在使用tensorflow对象检测来生成模型.我创建了使用冷冻模型这个出口(生成的冷冻模型作品使用python脚本).

冻结的图形目录具有以下内容(目录上没有任何内容variables)

变量/

saved_model.pb

现在,当我尝试使用以下命令提供服务时,

tensorflow_model_server --port=9000 --model_name=ssd --model_base_path=/serving/ssd_frozen/
Run Code Online (Sandbox Code Playgroud)

它总是告诉我

...

tensorflow_serving/model_servers/server_core.cc:421](重新)添加模型:ssd 2017-08-07 10:22:43.892834:W tensorflow_serving/sources/storage_path/file_system_storage_path_source.cc:262]在基础下找不到任何版本的servable ssd path/serving/ssd_frozen/2017-08-07 10:22:44.892901:W tensorflow_serving/sources/storage_path/file_system_storage_path_source.cc:262]在基本路径/ serving/ssd_frozen /下找不到servable ssd的版本

...

object-detection deep-learning tensorflow tensorflow-serving

22
推荐指数
2
解决办法
6478
查看次数

TensorFlow对象检测API奇怪的行为

我正在使用TensorFlow的全新Object Detection API,并决定在其他一些公开的数据集上进行训练.

我偶然偶然发现这个杂货数据集,其中包括超市货架上各种品牌香烟盒的图像,以及一个文本文件,其中列出了每个图像中每个香烟盒的边界框.数据集中已标注10个主要品牌,所有其他品牌均属于第11个"杂项"类别.

我按照他们的教程设法在这个数据集上训练模型.由于处理能力的限制,我只使用了数据集的三分之一,并进行了70:30分割,用于训练和测试数据.我使用了faster_rcnn_resnet101模型.配置文件中的所有参数与TF提供的默认参数相同.

在16491个全局步骤之后,我在一些图像上测试了模型,但我对结果不太满意 -

无法在顶层检测到Camels,而在其他图像中检测到该产品

为什么它没能检测到顶行的万宝路?

我遇到的另一个问题是模型从未检测到除标签1之外的任何其他标签

未从训练数据中检测到产品的裁剪实例

即使在负像中,它也可以99%的置信度检测香烟盒!

有人可以帮我解决问题吗?我该怎么做才能提高准确度?为什么它会检测到属于第1类的所有产品,尽管我已经提到总共有11个类?

编辑添加了我的标签贴图:

item {
  id: 1
  name: '1'
}

item {
  id: 2
  name: '2'
}

item {
  id: 3
  name: '3'
}

item {
  id: 4
  name: '4'
}

item {
  id: 5
  name: '5'
}

item {
  id: 6
  name: '6'
}

item {
  id: 7
  name: '7'
}

item {
  id: 8
  name: '8'
}

item {
  id: …
Run Code Online (Sandbox Code Playgroud)

python classification machine-learning object-detection tensorflow

19
推荐指数
2
解决办法
7082
查看次数

如何为多个模型使用tensorflow服务

我如何使用多个tensorflow模型?我用的是docker容器.

model_config_list: {

  config: {
    name: "model1",
    base_path: "/tmp/model",
    model_platform: "tensorflow"
  },
  config: {
     name: "model2",
     base_path: "/tmp/model2",
     model_platform: "tensorflow"
  }
}
Run Code Online (Sandbox Code Playgroud)

multiple-models tensorflow-serving

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

Tensorflow Deeplab 图像颜色图去除混淆

在下面的代码中,我只看到,再次读取和写入图像。但是图像像素值是如何发生如此剧烈的变化的呢?显然,将 PIL 图像对象转换为numpy数组会导致这种情况,但不知道为什么。我已经阅读了 PIL 图像的文档,但没有看到任何合理的解释。

import numpy as np
from PIL import Image


def _remove_colormap(filename):
  return np.array(Image.open(filename))


def _save_annotation(annotation, filename):
  pil_image = Image.fromarray(annotation.astype(dtype=np.uint8))
  pil_image.save(filename)


def main():
  raw_annotation = _remove_colormap('2007_000032.png')
  _save_annotation(raw_annotation, '2007_000032_output.png')


if __name__ == '__main__':
  main()
Run Code Online (Sandbox Code Playgroud)

输入图像是,

输入图像

这是输出,

输出图像

注意:输入图像中红色区域的值为[128,0,0],输出图像中为[1,1,1]。

代码的实际来源在这里

编辑:正如@taras 在他的评论中明确指出的那样,

基本上,调色板是 3 * 256 个值的列表,形式为 256 个红色值、256 个绿色值和 256 个蓝色值。您的 pil_image 是一个灰度像素数组,每个像素在 0..255 范围内取一个值。当使用“P”模式时,像素值 k 被映射到一种颜色(调色板 [k]、调色板 [256 + k]、调色板 [2*256 + k])。使用“L”模式时,RGB 中的颜色只是 k 或 (k, k, k)

分割图像注释为每种对象类型使用唯一的颜色。所以我们不需要用于可视化的实际调色板,我们摆脱了不必要的调色板。

python image-processing python-imaging-library

5
推荐指数
1
解决办法
1398
查看次数

从 C# 中的位图创建一个全新的位图副本

我需要来自另一个位图的位图的深层副本。现在,大部分的解决方案,说像这样,这不是一个深拷贝。这意味着当我锁定原始位图时,副本也会被锁定,因为克隆是原始位图的浅表副本。现在以下似乎对我有用,但我不确定这是否适用于所有情况。

public static Bitmap GetCopyOf(Bitmap originalImage)
{
    Rectangle rect = new Rectangle(0, 0, originalImage.Width, originalImage.Height);
    Bitmap retrunImage = new Bitmap(originalImage.Width, originalImage.Height, originalImage.PixelFormat);
    BitmapData srcData = originalImage.LockBits(rect, ImageLockMode.ReadOnly, originalImage.PixelFormat);
    BitmapData destData = retrunImage.LockBits(rect, ImageLockMode.WriteOnly, originalImage.PixelFormat);
    int dataLength = Math.Abs(srcData.Stride) * srcData.Height;
    byte[] data = new byte[dataLength];
    Marshal.Copy(srcData.Scan0, data, 0, data.Length);
    Marshal.Copy(data, 0, destData.Scan0, data.Length);
    destData.Stride = srcData.Stride;
    if (originalImage.Palette.Entries.Length != 0)
        retrunImage.Palette = originalImage.Palette;
    originalImage.UnlockBits(srcData);
    retrunImage.UnlockBits(destData);
    return retrunImage;
}
Run Code Online (Sandbox Code Playgroud)

我需要更好,更优雅的方式来做到这一点。否则,只需指出上述代码可能会失败的一些情况。TIA

c# bitmap image-processing deep-copy

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

使用'keep_aspect_ratio_resizer'的Tensorflow对象检测API SSD模型

我正在尝试检测不同形状的图像(不是正方形)中的物体。我使用了faster_rcnn_inception_v2模型,并且可以使用图像缩放器来保持图像的纵横比,并且输出令人满意。

image_resizer {
  keep_aspect_ratio_resizer {
    min_dimension: 100
    max_dimension: 600
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,为了提高性能,我想使用ssd_inception_v2或ssd_inception_v2模型进行训练。的示例配置的用途固定形状调整大小如下,

image_resizer {
  fixed_shape_resizer {
    height: 300
    width: 300
  }
}
Run Code Online (Sandbox Code Playgroud)

但是问题是由于固定的调整大小,我得到的检测结果很差。我尝试将它更改为keep_aspect_ratio_resizer,如先前在fast_rcnn_inception_v2中所述。我收到以下错误,

InvalidArgumentError(请参见上面的回溯):ConcatOp:输入的尺寸应匹配:shape [0] = [1,100,500,3] vs. shape 1 = [1,100,439,3]

如何在SSD模型中进行配置,以调整图像大小并保持宽高比?

object-detection tensorflow object-detection-api

3
推荐指数
1
解决办法
4875
查看次数

为什么C ++ STL使用unsigned in size()函数?

我在使用这样的循环时遇到了一个问题,

//vector<int> sides;
for (int i = 0; i < sides.size()-2; i++) {
  if (sides[i] < sides[i+1] + sides[i+2]) {
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

问题是size()方法使用无符号数字。因此,大小小于2的向量会产生不确定的结果。

我知道我应该为循环使用一个无符号变量,但是它不能解决问题。所以我不得不通过类型转换或使用某些条件来处理它。

我的问题是,为什么STL为什么使用unsigned int来消除否定索引访问冲突并产生更多问题?

c++ size containers stl sizeof

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