有没有人知道用于拍摄图像并在其上执行图像识别的c ++库,以便它可以根据给定的字体和/或字体高度找到字母?即使是不允许你选择字体的那个也不错(例如:readLetters(Image image).
我成功地使用了Haar分类器和OpenCV.不幸的是,它似乎只适用于方形物体和固定角度(即面部).但是我需要找到具有不同角度的"长"(矩形)物体(参见样本输入图像).
有没有办法训练哈尔分类器找到这样的对象?我能找到的只是面部识别的教程.还有其他替代方法吗?

opencv classification image-processing image-recognition pattern-matching
我已经阅读了很多关于哈尔培训的内容,而且我不清楚应该使用多少图像用于正负样本集.我看到它建议使用很多图像,有些人推荐数千个.我也不清楚正负样本图像的数量是否应该相同?
opencv artificial-intelligence image-processing image-recognition
我正在使用Kinect开发一个广告应用程序,我想要做的是当一个人进入Kinect范围内时,它应该展示与男性产品相关的广告,同样也与女性相关.
可以吗?我应该从哪里开始?
应用程序的要点是从已经设置的图像列表中识别图像.图像列表已将SIFT描述符提取并保存在文件中.这里没什么有趣的:
std::vector<cv::KeyPoint> detectedKeypoints;
cv::Mat objectDescriptors;
// Extract data
cv::SIFT sift;
sift.detect(image, detectedKeypoints);
sift.compute(image, detectedKeypoints, objectDescriptors);
// Save the file
cv::FileStorage fs(file, cv::FileStorage::WRITE);
fs << "descriptors" << objectDescriptors;
fs << "keypoints" << detectedKeypoints;
fs.release();
Run Code Online (Sandbox Code Playgroud)
然后设备拍照.SIFT描述符以相同的方式提取.现在的想法是将描述符与文件中的描述符进行比较.我正在使用OpenCV的FLANN匹配器.我试图通过图像来量化相似性.经过整个清单后,我应该有最好的匹配.
const cv::Ptr<cv::flann::IndexParams>& indexParams = new cv::flann::KDTreeIndexParams(1);
const cv::Ptr<cv::flann::SearchParams>& searchParams = new cv::flann::SearchParams(64);
// Match using Flann
cv::Mat indexMat;
cv::FlannBasedMatcher matcher(indexParams, searchParams);
std::vector< cv::DMatch > matches;
matcher.match(objectDescriptors, readDescriptors, matches);
Run Code Online (Sandbox Code Playgroud)
匹配后我明白我得到了特征向量之间最近找到的距离列表.我找到了最小距离,并且使用它我可以计算"好的匹配",甚至可以获得相应点的列表:
// Count the number of mathes where the distance is less than 2 * min_dist
int goodCount …Run Code Online (Sandbox Code Playgroud) 我想通过使用直方图匹配和方法关联来比较两个图像。
显然,这两个图像是相似的。然后,我尝试找出与以下代码的相关性。
import cv2
import numpy as np
#reading the images and convert them to HSV
base = cv2.imread('base.jpg')
test1 = cv2.imread('test1.jpg')
basehsv = cv2.cvtColor(base,cv2.COLOR_BGR2HSV)
test1hsv = cv2.cvtColor(test1,cv2.COLOR_BGR2HSV)
# Calculate the Hist for each images
histbase = cv2.calcHist(basehsv,[0,1],None,[180,256],ranges)
cv2.normalize(histbase,histbase,0,255,cv2.NORM_MINMAX)
histtest1 = cv2.calcHist(test1hsv,[0,1],None,[180,256],ranges)
cv2.normalize(histtest1,histtest1,0,255,cv2.NORM_MINMAX)
# Compare two Hist. and find out the correlation value
base_test1 = cv2.compareHist(histbase,histtest1,0)
print base_test1
Run Code Online (Sandbox Code Playgroud)
但是,打印出的结果仅为0.05xxx。
为什么相关性如此之小?
如何改善结果?谢谢。
我在tensorflow站点尝试了初始教程:https: //www.tensorflow.org/versions/r0.12/how_tos/image_retraining/ bazel build已成功完成但当我尝试使用此命令预测图像类时:
bazel build tensorflow/examples/label_image:label_image && \
bazel-bin/tensorflow/examples/label_image/label_image \
--graph=/tmp/output_graph.pb --labels=/tmp/output_labels.txt \
--output_layer=final_result \
--image=$HOME/flower_photos/daisy/21652746_cc379e0eea_m.jpg
Run Code Online (Sandbox Code Playgroud)
我有这个错误:tensorflow/examples/label_image/main.cc:305]运行模型失败:未找到:FeedInputs:无法找到Feed输入
我怎么解决这个问题
我正在使用Inception v3机器学习模型在Swift中构建一个基本的图像识别应用程序.我拖放了项目文件夹中的Inceptionv3.mlmodel,并确保勾选了"如果需要,复制项目"选项.
在检测功能内:
func detect(image: CIImage) {
guard let model = try? VNCoreMLModel(for: Inceptionv3().model) else {
fatalError("Loading CoreML Model Failed!")
}
let request = VNCoreMLRequest(model: model) { (request, error) in
guard let results = request.results as? [VNClassificationObservation] else {
fatalError("Model failed to process")
}
if let firstResult = results.first {
self.navigationItem.title = firstResult.identifier
}
}
Run Code Online (Sandbox Code Playgroud)
我收到以下消息:
使用未解析的标识符'Inceptionv3'
此外,当我在项目浏览器上单击Inceptionv3.mlmodel文件时,我收到以下消息:
接口生成仅适用于有效目标
但我知道它应该是这样的:
Inceptionv3(Swift生成源代码)
旁边有一个小箭头,可以让您访问该课程.
有任何想法吗?
我已经在Python中编写了一个解决方案,该解决方案效果很好,但是需要安装几个库以及许多专业设置才能工作.我决定在Visual Studio Community 2017上使用C#中的GUI构建它,但在第一个成功的函数中,结果比Python慢.哪个IMO实际上应该更快.
代码本质上只是在大海捞针图像搜索中,通过从文件夹中获取所有图像并在大海捞针中测试每个针(总共60个图像),在python中我返回字符串,但在C#中我只是打印.
我在Python中的代码如下:
def getImages(tela):
retorno = []
folder = 'Images'
img_rgb = cv2.imread(tela)
for filename in os.listdir(folder):
template = cv2.imread(os.path.join(folder,filename))
w, h = template.shape[:-1]
res = cv2.matchTemplate(img_rgb, template, cv2.TM_CCOEFF_NORMED)
threshold = .96
loc = np.where(res >= threshold)
if loc[0]>0:
retorno.append(filename[0]+filename[1].lower())
if len(retorno)> 1:
return retorno
Run Code Online (Sandbox Code Playgroud)
在C#中:
Debug.WriteLine(ofd.FileName);
Image<Bgr, byte> source = new Image<Bgr, byte>(ofd.FileName);
string filepath = Directory.GetCurrentDirectory().ToString()+"\\Images";
DirectoryInfo d = new DirectoryInfo(filepath);
var files = d.GetFiles();
foreach (var fname in files){
Image<Bgr, byte> template = …Run Code Online (Sandbox Code Playgroud)