Python使用aruco实现相机标定
姿态估计在许多计算机视觉的应用中都是十分重要的环节,在机器人导航、增强现实等场景中广泛运用。这个过程主要基于找到点在真实3d环境中的坐标和2d图像中的对应坐标。这通常是一个比较困难的步骤,因此运用通用的标记物或者标准标号来使这个问题简单一点。
ArUco简介ArUco是一个开源的微型的现实增强库,目前好像已经集成在OpenCV3.0以上的版本内了,它除了用于现实增强,还很用于实现一些机器视觉方面的应用,上图中的波士顿动力也曾用此方法用于Atlas的视觉定位,下面是两个重要的网址:
ArUco下载地址:ArUco下载(可以下载2.0.19或3.0.0)
ArUco的Marker生成网址:Marker生成(可以定制Marker的size、ID以及Padding)
ArUco开源库的几个特点如下:
1.基于C++;
2.仅依赖于OpenCV(≥2.4.9)和Eigen3(源码中已经包含);
3.BDS开源。
Demopip install opencv-contrib-python才有扩展模块,扩展模块中包含aruco
123456789101112131 ...
Python使用dlib实现人脸检测
前期准备在开始之前,你得先做如下准备:
opencv 这个一般没啥问题,通过pip install opencv-python安装即可。
dlib 安装dlib之前需要安装好cmake,之后再通过pip install dlib安装,如果报错的话,再自行百度吧,我是折腾了一下午才弄好。
下载dlib提供的检测模型文件 下载地址:http://dlib.net/files/ 文件名shape_predictor_68_face_landmarks.dat
人脸检测单一图片代码部分实现起来非常简单,不过十几行的事,不过需要注意的是,通过cv2.imread读取的图片是BRG通道的,需要转成RGB通道,不然通过pyplot显示图片会变色。
1234567891011121314151617181920212223242526272829303132333435#!/usr/bin/env python2#-*- coding:utf-8 -*-import cv2import dlibimport matplotlib.pyplot as pltimport numpy as nppre ...
Mac OS X:Python is not installed as a framework解决方案
今天运行一段python代码时出错。
报错信息:
RuntimeError: Python is not installed as a framework. The Mac OS X backend will not be able to function correctly if Python is not installed as a framework. See the Python documentation for more information on installing Python as a framework on Mac OS X. Please either reinstall Python as a framework, or try one of the other backends. If you are using (Ana)Conda please install python.app and replace the use of ‘python’ with ‘pythonw’. See ‘Working with Matplotlib on OSX’ ...
远程桌面连接Ubuntu
由于今年疫情影响,有些时候,我们需要远程开发。不在办公室,需要安装开发软件,搭建服务等,很多时候不方便。
这样我们就需要一个远程桌面,远程连接到公司电脑开发。有很多远程连接工具,例如使用TeamViewer,qq等。
如果我们远程系统是Ubuntu,我们也可以使用vnc连接。在办公室电脑中安装vnc服务端,然后在远程电脑中再安装一个客户端,就可以像在公司一样,使用自己电脑开发了。
服务端在Ubuntu上安装x11vnc
123456789sudo apt-get install x11vnc# 配置vnc密码x11vnc -storepasswd# 启动vnc服务, 如果提示~/.vnc/passwd 读取权限错误,需要使用sudox11vnc -forever -shared -rfbauth ~/.vnc/passwd
查询服务器的ipd地址
1ifconfig
当然使用后台执行,更加方便
1nohup x11vnc -forever -shared -rfbauth ~/.vnc/passwd
客户端下载客户端
https://www.realvnc.com/en/conn ...
Go 实现简易web框架
用 Go 实现一个 http server 非常容易,Go 语言标准库 net/http 自带了一系列结构和方法来帮助开发者简化 HTTP 服务开发的相关流程。因此,我们不需要依赖任何第三方组件就能构建并启动一个高并发的 HTTP 服务器。
基于 HTTP 构建的服务标准模型包括两个端,客户端 (Client) 和服务端 (Server)。HTTP 请求从客户端发出,服务端接受到请求后进行处理然后将响应返回给客户端。所以 http 服务器的工作就在于如何接受来自客户端的请求,并向客户端返回响应。
Demo1123456789101112131415package mainimport ( "fmt" "net/http")func HelloHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello World")}func main () { http.HandleFunc(" ...
Go web中间件记录请求日志及响应
中间件(通常)是一小段代码,它们接受一个请求,对其进行处理,每个中间件只处理一件事情,完成后将其传递给另一个中间件或最终处理程序,这样就做到了程序的解耦。
如果没有中间件那么我们必须在最终的处理程序中来完成这些处理操作,这无疑会造成处理程序的臃肿和代码复用率不高的问题。中间件的一些常见用例是请求日志记录,Header 操纵、HTTP 请求认证和 ResponseWriter 劫持等等。
原理在net/http包中可以看到定义了一个Handler接口
123type Handler interface { ServeHTTP(ResponseWriter, *Request)}
http.Handler 它 是 net/http 中定义的接口用来表示处理 HTTP 请求的对象,其对象必须实现 ServeHTTP 方法。
创建中间件中间件只将 http.HandlerFunc 作为其参数,在中间件里将其包装并返回新的 http.HandlerFunc 供服务器服务复用器调用。
123456789101112131415161718192021type Middlew ...
利用ngrok服务内网穿透-轻松调试本机站点
我们经常会有「把本机开发中的 web 项目给朋友看一下」这种临时需求,为此专门在 服务上部署一遍就有点太浪费了。
之前我通常是在 ADSL 路由器上配个端口映射让本机服务在外网可以访问,但现在大部分运营商不会轻易让你这么干了。一般小运营商也没有公网 IP,自己的路由器出口还是在局域网内,端口映射这种做法就不管用了。
之前我就想过能否借助拥有公网 IP 的主机中转来实现这种需求,后来发现已经有这样的软件了:ngrok。而且 ngrok 官网本身还提供了公共服务,只需要注册一个帐号,运行它的客户端,就可以快速把内网映射出去。
[ngrok官网](https://ngrok.com/)
我们现在是自己搭建ngrok服务端。前提条件是:一台外网可访问的主机,且有域名解析至该主机上。
ngrok是什么鬼?如果你完全不知道它是什么东西,可以在它的github项目上了解下:https://github.com/inconshreveable/ngrok这里只提下它的核心功能:能够将你本机的HTTP服务(站点)或TCP服务,通过部署有ngrok服务的外网伺服器暴露给外网访问!
如上封面图所示,举一个 ...
go调用Https时出错:certificate signed by unknown authority
今天在使用golang请求微信服务时,出现错误。
x509: certificate signed by unknown authority
从日志来看go实现的Client端默认也是要对服务端传过来的数字证书进行校验的,但客户端提示:这个证书是由不知名CA签发 的!
对应这个问题,有2种不同的解决办法。
client端忽略证书的校验示例
123456789101112131415161718package mainimport ( "fmt" "io/ioutil" "net/http")func main() { resp, err := http.Get("https://localhost:8081") if err != nil { fmt.Println("error:", err) return } defer resp.Body.Close() body, err : ...
kibana异常处理
今天在使用kibana时,出现异常。其结合Elasticsearch,用于处理服务日志。Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。百度百科
Timeout提示kibana-Request Timeout after 30000ms故障解决
一、方法一:修改elastisearch的内存 lasticsearch多一点内存,配置文件/etc/elasticsearch/jvm.options,修改完毕重启服务 1234 # Xms represents the initial size of total heap space# Xmx represents the maximum size of total heap space-Xms8g #默认1g-Xmx8g #默认1g官方文档建议修改为机器内存的一半,不超过32GB。
二、方法二:修改kibana的超时时间 修改配置文件/etc/kibana/kibana.yml的第 ...
go存储json数据时,数据模型定义
mysql在5.6版本时,不支持直接Json存储,我们一般存储成varchar等string类型。编码时,我们也是将数据json格式化后,存储。
从5.7版开始,开始支持JSON格式存储,那么在使用Go存储对应的字段时,如何定义struct,就是一个问题。现有orm一般没有支持json类型的定义。如果struct定义为string类型,会导致一些问题。例如JSON数据为空时,存储的是””, 有时候会导致一些差别。
例如使用gorm存储数据时,不支持Json类型的数据结构。为解决这个问题,我们可以自定义一个JSON的struct
Mysql结构如在Mysql中定义了如下的表结构
12345678910CREATE TABLE `report` ( `id` bigint(20) NOT NULL, `query_param` json DEFAULT NULL, `create_by` varchar(50) DEFAULT NULL COMMENT '创建人', `create_date` timestamp NULL DEFAULT NULL COMMEN ...