小编rba*_*dar的帖子

为什么git无法获取给定提交的特定有效子模块以及如何修复它?

我有一个git回购,另一个作为submodule依赖.在我的项目的根(其中.git,.gitsubmodules等等都是)我叫

git submodule update
Run Code Online (Sandbox Code Playgroud)

此操作失败,并显示以下消息:

在子模块路径'src/framework'中获取,但它不包含cc8c38e9d853491c672452d8dbced4666fc73ec8.直接获取该提交失败.

在哪里src/framework是我的项目(PROJECT_ROOT/src/framework)的子目录,应该是第三方回购的地方.给定的提交哈希值是有效的.

我也尝试过,git clone --recursive <my-repo>但也失败了.

我的内容.gitsubmodules

[submodule "src/framework"]
        path = src/framework
        url = git@gitlab-blah-internal.de:gh/framework.git
Run Code Online (Sandbox Code Playgroud)

除此之外,我必须注意以下重要事实:由于最近的frameworkrepo 更新我的代码中断因此我真的需要检索它的特定版本,其中一切正常.

git git-submodules git-commit

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

OpenCV ORB描述符 - 它是如何存储在一组字节中的?

我目前正在使用OpenCV的ORB特征提取器,我确实注意到存储ORB描述符的奇怪(至少对我而言)(它基本上是一个Brief-32,其修改与我的问题无关).由于一些你知道ORB需要使用改良的FAST-9提取的关键点(圆半径= 9个像素;还存储所述关键点的方向),并使用那些具有修饰的附图-32的描述符存储的特征,即关键点表示.

BRIEF(ORB版)的工作原理如下:我们采用31x31像素的补丁(代表一个特征)并创建一堆随机的5x5像素测试点.然后我们采用这些点的对并评估它们的强度,从而基于该对中的第一点的强度是大于还是小于第二点的强度来产生二元决策(0或1).然后我们取所有这些位并使用基本求和公式来构建长度为n的二进制字符串(对于BRIEF-32,我们有32个字节*8 = 256位长的二进制字符串):

SUM(2 (i-1)*bit_pair_test)

其中bit_pair_test是我们从一对测试点的测试中计算出的位值.最终的结果是(对于一组二进制测试(...,0,1,0,1,1)):

(2 0*1)+(2 1*1)+(2 2*0)+(2 3*1)+(2 4*0)+ ...

现在,OpenCV的ORB存储这些位串的方式对我来说是个谜.如果我们查看包含整个图像的描述符的矩阵,其中每一行是单个关键点的单个描述符,我们可以看到每个描述符有32个8位数,这总共产生了Brief-32使用的那些256位存储信息.我不明白为什么我们在32字节中分割这256位.官方文档(http://docs.opencv.org/trunk/doc/py_tutorials/py_feature2d/py_brief/py_brief.html)只说以字节为单位的OpenCV商店这样的描述,但它并不能解释为什么它做到这一点.我已经考虑了三种可能性,但没有排除这些可能是答案的可能性的可能性:

  • 我看不到的一些存储技术
  • 二进制字符串计算汉明距离的一些性能问题很长(在我们的例子中是256位)
  • 匹配过程的优化 - 匹配基本上将来自一个图像的关键点的描述符与第二图像中的关键点的描述符进行比较.因为我们有二进制字符串汉明距离是这里显而易见的选择.这可能是某种方式每那些32个子串进行比较,它们在第二图像(子串的其它关键点的描述符在位置0对应在位置0(关键点X,图像1)与子串( .关键点Y,图像2)最后它可能是OpenCV的说:"好吧,我们有描述符的匹配率80%,因为约的所有子串26是相同的两个描述符),所以我们有一个赢家." 但是我无法找到任何证据证实这一点.

PS:你可以阅读ORB纸在这里和简单的文件在这里.

storage opencv orb feature-descriptor

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

OpenCV:如何使用findHomography()/ findFundamental()和RANSAC获取内部点

OpenCV本身不提供RANSAC功能,或者至少以这种形式提供,您可以调用它并完成它(例如cv::ransac(...)).能够使用RANSAC的所有函数/方法都有一个启用它的标志.然而,如果您实际上想要在估算单应性/基本矩阵之后使用内部RANSAC计算其他内容,例如在Octave或类似软件/点库中创建一个好的绘图,则应用其他算法并不总是有用.剩余的过滤匹配等.

在匹配两个图像之后,获得匹配的矢量.与此同时,我们当然在匹配过程中使用了两组关键点(每个图像一个).使用匹配和关键点,我们创建两个点向量(例如cv::Point2f points)并将它们传递给findHomography().从这篇文章和这篇文章中我发现了如何使用掩码标记内部函数,我们传递给该函数.掩码内的每一行都与内部/异常值有关.但是我无法弄清楚如何使用我的两组点中的行索引信息.查看OpenCV的源代码并没有让我太过分.In findFundamental()(类似于findHomography()它的签名和掩码部分)它们使用compressPoints(),它似乎以某种方式将我们作为输入的两个集合(源和目标点)合并为一个.在测试以确定掩模的性质时,我尝试了2组匹配点(转换cv::Keypointscv::Point2f- 标准程序).每组包含300分,所以总共有600分.返回的掩码包含300行(对于此主题,值并不重要).

编辑:在写这篇文章时,我发现了答案(见下文),但决定发布这个问题,以防有人需要尽快并以紧凑的形式提供这些信息.请注意,我们仍然需要一个支持RANSAC的OpenCV功能.因此,如果您有一组点但无意计算单应性或基本矩阵,这显然不是方法,我敢说我无法在OpenCV的API中找到任何有用的东西,可以帮助避免这个障碍,因此您需要使用外部图书馆.

opencv mask extraction points ransac

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

Tesseract - 根本无法识别希腊字母

我正在尝试从图像中自动提取比例(比例尺+数字+单位)。这是一个例子:

\n

在此输入图像描述

\n

它用于将像素映射到现实世界的测量。

\n

我正在使用PyTesseract(通过Anaconda3安装)。

\n

这是我的代码:

\n
import cv2\nimport pytesseract\nimport numpy as np\n\nimg = cv2.imread(\'pbmk_scale.tif\')\n#img = cv2.imread(\'ocr_test_greek_and_english.png\')\ngray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)\nblur = cv2.GaussianBlur(gray, (3,3), 0)\nthresh = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]\n\n# Morph open to remove noise and invert image\nkernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))\nopening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=1)\ninvert = 255 - opening\n\n# Line detection for the scale line\nedges = cv2.Canny(gray,50,150,apertureSize = 3)\nminLineLength = 100\nmaxLineGap = 10\nlines = cv2.HoughLinesP(edges,1,np.pi/180,100,minLineLength,maxLineGap)\nx1,y1,x2,y2 = lines[0][0]\nprint(\'Line (\' + str(x1) + \',\' …
Run Code Online (Sandbox Code Playgroud)

python ocr tesseract training-data python-tesseract

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

GitLab 中的“允许使用 CI_JOB_TOKEN 访问此项目”是否可以在私有存储库之间工作?

我是私人团体(我们部门的团队)的成员。所有底层项目和子组只能是私有的(这就是 GitLab 的工作方式),并且我们都至少拥有对这些项目和子组的报告级别访问权限。不要与每个用户的个人命名空间混淆!

我为我正在处理的一个大型 Django 项目创建了一个包含多个存储库的子组。其中一个存储库(主要的,还包括manage.py用于django-admin配置和运行整个项目的 Django 项目主文件)正在引用其他几个作为子模块(Django 应用程序)。

我正在尝试使用 Kaniko 创建一个构建作业,该作业在主存储库中配置,并使用存储库自己的代码以及所有子模块来完成应用程序。不幸的是,我遇到了身份验证问题

尽管我是子组以及内部存储库的所有者,但克隆子模块显然仍然需要用户名和密码。我的设置不允许我使用添加git config所需的凭据 - 自动生成的 CI 用户和CI_JOB_TOKEN- 我决定研究在以某种方式链接的所有存储库(主存储库 + 子模块)之间共享这些凭据。

在 GitLab Web UI 的 CI/CD 部分中,我有以下选项:

在此输入图像描述

我尝试将项目的路径设置为使用当前存储库作为子模块的主存储库。然而,我得到

The target_project that you are attempting to access does not exist or you don't have permission to perform this action
Run Code Online (Sandbox Code Playgroud)

该项目确实存在(尝试过使用或不使用.git后缀),因此唯一剩下的就是凭证问题。

我可能错过了一个提示,但官方文档并没有说私人仓库不能共享令牌。

access-token gitlab cicd

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

Qt Creator 为 Raspberry Pi 2 进行交叉编译和远程部署的正确设置 - 为错误的架构生成二进制文件

我只是经历了地狱般的设置我的 Qt Creator、Raspberry Pi 和 Debian 8(用于我的笔记本),最后设法配置了所有东西。或者我是这么想的。下面是对我到目前为止所做的工作的描述,以便 Stackoverflow 上的一些聪明人可能会看到我做过(或没有做过:D)的蠢事。

我正在使用以下平台:

  • 运行最新 Raspbian 的 Raspberry Pi 2 - 我想在其中运行代码的目标平台
  • 64 位 Debian 8 Jessie - 我想在其中开发代码的开发平台

在我的笔记本 (Debian) 和 RPi2 (Raspbian) 之间启动并运行 SSH 后,我开始四处寻找教程,如何设置我最喜欢的 C/C++ IDE Qt Creator以开发 RPi2 的应用程序。项目工具是cmake(我在下面提到这个,因为另一个选项 - using qmake- 也可用并且更容易使用,但对于我的项目cmake是强制性的)。

这里的关键词当然是交叉编译远程部署

  1. 获取交叉编译的工具链- 主要用于 arm-linux-gnueabihf-g++,这是交叉编译所必需的(我不想使用CodeSourcery g++)。文章指出armhf适用于 RPi2,这就是我特别选择这个编译器的原因

  2. 配置 Qt Creator 第 1 部分 - 添加 Linux 设备、开发工具包和编译器- 基本上在这里您告诉 Qt Creator 您的目标平台,在这种情况下,RPi2 被认为是通用 …

linux deployment arm qt-creator raspberry-pi2

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

c ++ - 使用std命名空间和依赖项

在尝试熟悉c ++及其概念时,我遇到了

using namespace std
Run Code Online (Sandbox Code Playgroud)

#include <iostream>
Run Code Online (Sandbox Code Playgroud)

我的简单代码如下

#include "stdafx.h"
#include "ConsoleApplication5.h"
#include <iostream>     

int main()
{
    std::cout << "hi";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用使用intellisense的Visual Studio 2015社区显示

COUT

使用以下内容

std :: ostream std :: cout

作为一名C#程序员,这让我感到困惑.这是 :

的std :: ostream的

是一种回归类型

性病::法院

是传递的方法/参数或是

的std :: ostream的

依赖于

COUT

更新(Archimaredes答案后)

在C#中,可以使用以下内容:

StreamWriter srWrite;
Run Code Online (Sandbox Code Playgroud)

要么

StreamWriter srWrite = new StreamWriter(string filepath)
Run Code Online (Sandbox Code Playgroud)

或者可以使用:

StreamWriter srWrite = new StreamWriter(new NetworkStream(Socket.GetStream()));
Run Code Online (Sandbox Code Playgroud)

每种情况都是一种类型的对象

StreamWriter
Run Code Online (Sandbox Code Playgroud)

可以使用新对象或现有文件或网络流进行分配.

我之后尝试了同样的事情(原谅C#心态)std::ostream x = new std:ostream,返回一个没有默认的构造函数.

你能不能添加std :: ostream和std …

c# c++ c++11

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

为什么 QList::at() 不检查索引是否存在并返回只读值?

这个问题更多的是一种询问,而不是实际寻求问题的解决方案。

QList::at()不仅不检查索引是否越界,而且还返回 aconst因此它只能在以下场景中使用read-only

const T &QList::at(int i) const

返回列表中索引位置 i 处的项目。i 必须是列表中的有效索引位置(即,0 <= i < size())。

这个函数非常快(恒定时间)。

我刚刚在尝试为列表中的元素分配新值时发现了这些特殊的实现细节QList,我想知道是否有这样做的理由。

不检查索引有效性

如果C++ STL我们采取std::arraystd::vector(我不采取std::list,因为它根本没有std::list::at()),我们有以下内容:

std::向量::at

该函数自动检查 n 是否在向量中有效元素的范围内,如果不在则抛出 out_of_range 异常

起初我以为不包括检查是为了确保“这个功能非常快(恒定时间)”。然而,在查看了实现之后,QList我不得不说,即使包含恒定时间(并且高速)的检查,也绝对可以保证。

检查越界需要两件事(据我所知):

  • 检查给定索引是否< 0 - 这是一个恒定时间检查(O(1)如果我们使用一些古怪的符号)。显然我们不能有负索引(我们可以,Python但它有另一个含义;))
  • 检查给定索引是否< QList::size()- 常数时间也存在于此,因为QList::size()实现方式是:

    inline int size() const Q_DECL_NOTHROW { return d->end - d->begin; }
    
    Run Code Online (Sandbox Code Playgroud)

    这又是O(1)(如果我没记错的话),因为这两个值都存储在QList::d参数内,该参数是指向 …

c++ indexing stl constants qlist

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

如何在不重复的情况下生成一组字符的所有组合?

我有以下清单:

['a', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法来生成包含这些字符的所有可能的字符串,并具有以下限制:

  • 可能不会出现字符多次(aababaabca等等是无效的)
  • 一个字符可以被排除在外(ab是有效的,即使c是不存在;a也即使有效bc不存在)

我可以用

[''.join(p) for p in permutations('abc')]
Run Code Online (Sandbox Code Playgroud)

生成包含a,b和 的所有字符串c。但是我也必须这样做

[''.join(p) for p in permutations('ab')]
[''.join(p) for p in permutations('ac')]
[''.join(p) for p in permutations('bc')]
Run Code Online (Sandbox Code Playgroud)

您可能会知道可用字符的初始列表是否很长,我需要做很多工作。所以我在 Python 中寻找一种优雅的方式来生成上述所有内容,只将允许的字符列表作为输入:

def generate(vals=['a', 'b', 'c']):
  # The initial list of allowed characters also has to be part of the 
  # final list since these also represent …
Run Code Online (Sandbox Code Playgroud)

python python-2.7

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

如何在没有 JS 或 HTML 修改表的情况下通过 Python 在 Flask 表的 sort_url 中设置反向参数?

鉴于下表

class ProductsTable(Table):
  allow_sort=True

  id=Col('ID', show=False)
  price=Col('Price')
  available_online=Col('Available online?')
  available_num=Col('In stock')
  edit=ButtonCol('Edit', url_kwargs=dict(id='id'), endpoint='/products')

  def sort_url(self, col_id, reverse=False):
    if reverse:
      order = 'desc'
    else:
       order = 'asc'
    return '?sort={}&order={}'.format(col_id, order)
Run Code Online (Sandbox Code Playgroud)

由此我得到以下示例路径:

http://localhost:5000/products?sort=price&order=asc
http://localhost:5000/products?sort=available_num&order=asc
Run Code Online (Sandbox Code Playgroud)

我使用这些参数生成一个 SQL 查询,该查询在我的 SQLite 数据库上执行并呈现相应的排序表。

现在我的问题来自reverse我的sort_url. 我找不到任何没有它作为可选参数的示例,因此我无法找到任何告诉我如何设置此参数的示例。

当然,我可以随时更改 URL。对于上面的两个例子,这意味着

http://localhost:5000/products?sort=price&order=desc
http://localhost:5000/products?sort=available_num&order=desc
Run Code Online (Sandbox Code Playgroud)

但是,我希望在用户单击特定表格列的头部时更改顺序。

我怎么做?我是否必须使用实际的 HTML(并添加 JavaScript)或者是否可以通过 Flask 来完成。我在网上看到的表格通常有向上/向下箭头符号

在此处输入图片说明

每当点击时,切换排序顺序。

这涉及到 JS 和 HTML 的修改。如果可能的话,我想坚持使用 Flask 和 Python。Flask 表目前似乎工作的方式是单击无法切换reverse.

即使我reverse像这样将参数公开给我自己表的构造函数

def __init__(self, items, reverse):
  super().__init__(items, sort_reverse=reverse)
Run Code Online (Sandbox Code Playgroud)

这样我就可以根据从 URL 中提取的值来设置它,我的问题如何实际设置该值仍未得到解答。

python sorting flask flask-table

5
推荐指数
0
解决办法
250
查看次数