Simon Shi的小站

人工智能,机器学习, 强化学习,大模型,自动驾驶

0%

1、 Windows OpenCV c++

1、下载

下载OpenCV已经编译好的MinGW版本:https://github.com/huihut/OpenCV-MinGW-Build

2、配置

1
2
3
4
5
6
7
8
9
cmake_minimum_required(VERSION 3.15)
project(opencv_demo)

set(CMAKE_CXX_STANDARD 14)

add_executable(opencv_demo main.cpp)
set(OpenCV_DIR D:/opencv/OpenCV-MinGW-Build-OpenCV-4.0.0-rc-x64)
FIND_PACKAGE(OpenCV REQUIRED)
TARGET_LINK_LIBRARIES(opencv_demo ${OpenCV_LIBS})

3、使用

ref:

https://zhuanlan.zhihu.com/p/488576922

2、Ubuntu OpenCV c++

https://blog.csdn.net/qq_41962968/article/details/122848097

1、安装准备

安装最低要求(Ubuntu 18.04 作为参考)

1
2
3
4
5
6
sudo apt update && sudo apt install -y cmake g++ wget unzip

#安装依赖
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev
sudo apt-get install libgtk2.0-dev
sudo apt-get install pkg-config

2、下载opencv

1
2
3
4
5
6
7
mkdir OpencvRoute && cd OpencvRoute 
wget -O opencv.zip https://github.com/opencv/opencv/archive/4.x.zip
unzip opencv.zip
mv opencv-4.x opencv
cd opencv
makdir build
cd build

3、cmake

1
sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

4、编译

1
sudo make -j8

可以使用sudo make -j 8 、sudo make -j4 、sudo make
我这里就使用sudo make -j 8了
5、安装

1
sudo make install

6、配置环境

1
2
3
4
5
6
7
8
9
10
11
12
13
14
用gedit或者vim打开/etc/ld.so.conf
在文件中加上一行 /usr/loacal/lib
其中/user/loacal是opencv安装路径也就是makefile中指定的安装路

sudo gedit /etc/ld.so.conf


运行sudo ldconfig,
修改bash.bashrc文件

sudo gedit /etc/bash.bashrc
在文件末尾加入:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

然后在命令行中输入

1
source /etc/bash.bashrc

在命令行中输入如下命令:

1
pkg-config opencv --modversion

至此opencv的安装就完成了

如果出现 找不到opencv.pc的问题

手动创建opencv.pc:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
cd /usr/local/lib
sudo mkdir pkgconfig && cd pkgconfig
sudo gedit opencv.pc
然后添加:

prefix=/usr/local
exec_prefix=${prefix}
includedir=/usr/local/include
libdir=/usr/local/lib

Name: OpenCV
Description: Open Source Computer Vision Library
Version: 4.4.0
Libs: -L${exec_prefix}/lib -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dpm -lopencv_face -lopencv_photo -lopencv_freetype -lopencv_fuzzy -lopencv_hdf -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_optflow -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_xfeatures2d -lopencv_shape -lopencv_video -lopencv_ml -lopencv_ximgproc -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_flann -lopencv_xobjdetect -lopencv_imgcodecs -lopencv_objdetect -lopencv_xphoto -lopencv_imgproc -lopencv_core
Libs.private: -ldl -lm -lpthread -lrt
Cflags: -I${includedir}

7、测试Demo

写个程序测试下:
首先建立一个文件夹OpenCV_Code,下面新建一个cpp文件,名为test.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv )
{
if ( argc != 2 )
{
printf("usage: DisplayImage.out <Image_Path>\n");
return -1;
}
Mat image;
image = imread( argv[1], 1 );
if ( !image.data )
{
printf("No image data \n");
return -1;
}
namedWindow("Display Image", WINDOW_AUTOSIZE );
imshow("Display Image", image);
waitKey(0);
return 0;
}

再此文件夹下继续新建一个文件,名为 CMakeLists.txt:

1
2
3
4
5
cmake_minimum_required(VERSION 2.8)
project( test )
find_package( OpenCV REQUIRED )
add_executable( test test.cpp )
target_link_libraries( test ${OpenCV_LIBS} )
1
2
$ cmake ..
$ make

此时OpenCV_Code文件夹中已经产生了可执行文件test,下载Lina.jpg放在OpenCV_Code下,运行

./test Lina.jpg

库API

<opencv2/highgui/highgui.hpp>

<opencv2/imgproc/imgproc.hpp>

<opencv2/calib3d/calib3d.hpp>

[TOC]

PCL 官方资料

官网:https://pointclouds.org/

Windows 10

ref: https://blog.csdn.net/weixin_41991128/article/details/83864713

windows系统下PCL的安装与配置

PCL学习笔记(一)– Windows下配置安装PCL开发环境

下载

https://github.com/PointCloudLibrary/pcl/releases

安装

1、exe文件安装,安装路径D:/tools/plc/

2、pdb文件拷贝

​ 解压pcl-1.12.1-pdb-msvc2019-win64.zip里面的所有pdb文件,放到D:/tools/pcl/bin

Ubuntu PCL build & install

https://github.com/PointCloudLibrary/pcl/releases/

依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
sudo apt-get update
sudo apt-get install git build-essential linux-libc-dev
sudo apt-get install cmake cmake-gui
sudo apt-get install libusb-dev libudev-dev
sudo apt-get install mpi-default-dev openmpi-bin openmpi-common
sudo apt-get install libpcap-dev
sudo apt-get install libflann1.8 libflann-dev
sudo apt-get install libeigen3-dev
sudo apt-get install libopenni2-dev
sudo apt-get install libqhull7 libqhull-dev
sudo apt-get install freeglut3-dev pkg-config
sudo apt-get install libxmu-dev libxi-dev
sudo apt-get install mono-complete
sudo apt-get install openjdk-8-jdk openjdk-8-jre

编译

1
2
3
cmake ..
make
sudo make install

测试

1
/usr/local/bin/pcl_viewer ~/program/pcl-1.8.1/test/car6.pcd

使用PCL

网络上的demo: https://www.bbsmax.com/A/x9J2Pl8Kd6/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
project(cloud_viewer)
# set bin folder
set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/bin)
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})
set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR})

find_package(PCL 1.8.1 REQUIRED)
#message( [***] ${PCL_INCLUDE_DIRS})
#message( [***] ${PCL_LIBRARY_DIRS})
#message( [***] ${PCL_DEFINITIONS})
#message( [***] ${PCL_LIBRARIES})

include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
add_executable (cloud_viewer cloud_viewer.cpp)
target_link_libraries (cloud_viewer ${PCL_LIBRARIES})

目录
[toc]

课程资料

slambook first edition GitHub

goldqiu博客

视觉SLAM十四讲学习笔记-第四讲-Sophus实践、相似变换群与李代数

视觉SLAM十四讲学习笔记-第七讲-视觉里程计-ICP和实践

book website: 博文视点

目录大纲 office

  • ch2 概述,cmake基础
  • ch3 Eigen,三维几何
  • ch4 Sophus,李群与李代数 (sophus)
  • ch5 OpenCV,图像与相机模型
  • ch6 Ceres and g2o,非线性优化 (ceres, g2o)
  • ch7 特征点法视觉里程计 (BA/)
  • ch7_2 (pnp/icp)
  • ch8 直接法视觉里程计(LK,DM,)
  • ch9 project(OV前端)
  • ch10 Ceres and g2o,后端优化1(BA与图优化)
  • ch11 g2o and gtsam,位姿图优化
  • ch12 DBoW3,词袋方法(回环检测)
  • ch13 (稠密) 地图构建
  • CH14 slam现状与未来()

学习计划

  • C++ Primer 代码,代码敲一遍

  • 视觉SLAM十四讲,看懂原理,代码看懂,跑通

  • 开源框架学透,例如ORB-SLAM2

    • 二次开发,持续迭代
  • 开源代码移植,实地测试,解决遇到的问题。

    • 拓展:稠密建图

    • 语义地图

    • 动态场景

序号 大写 小写 国际音标[推荐] 英文 汉字注音 常用指代意义
1 Α α /‘ælfə/ alpha 阿尔法 角度,系数,角加速度
2 Β β /‘bi:tə/ /‘beɪtə/ beta 贝塔/毕塔 磁通系数,角度,系数
3 Γ γ /‘gæmə/ gamma 伽玛/甘玛 电导系数,角度,比热容比
4 Δ δ /‘deltə/ delta 德尔塔/岱欧塔 变化量,化学反应中的加热,屈光度,一元二次方程中的判别式
5 Ε ε /‘epsɪlɒn/ epsilon 艾普西龙 对数之基数,介电常数
6 Ζ ζ /‘zi:tə/ zeta 泽塔 系数,方位角,阻抗,相对黏度
7 Η η /‘i:tə/ eta 伊塔/诶塔 迟滞系数,效率
8 Θ θ /‘θi:tə/ theta 西塔 温度,角度
9 Ι ι /aɪ’əʊtə/ iota 埃欧塔 微小,一点
10 Κ κ /‘kæpə/ kappa 堪帕 介质常数,绝热指数
11 λ /‘læmdə/ lambda 兰姆达 波长,体积,导热系数; 强度
12 Μ μ /mju:/ mu 谬/穆 磁导系数,微,动摩擦系(因)数,流体动力黏度; 数学期望
13 Ν ν /nju:/ nu 拗/奴 磁阻系数,流体运动粘度,光子频率,化学计量数
14 Ξ ξ 希腊: /ksi/ 英美: /ˈzaɪ/或/ˈksaɪ/ xi 可西/赛 随机变量,(小)区间内的一个未知特定值
15 Ο ο /əuˈmaikrən/ /ˈɑmɪˌkrɑn/ omicron 欧 (阿~) 米可荣 高阶无穷小函数
16 π /paɪ/ pi 圆周率,π(n)表示不大于n的质数个数
17 Ρ ρ /rəʊ/ rho 柔/若 电阻系数,柱坐标和极坐标中的极径,密度
18 σ /‘sɪɡmə/ sigma 西格玛 总和,表面密度,跨导,正应力; 标准差
19 Τ τ /tɔ:/ /taʊ/ tau 套/驼 时间常数,切应力,2π(两倍圆周率)
20 Υ υ /ˈipsilon/ /ˈʌpsɨlɒn/ upsilon 宇 (阿~) 普西龙 位移
21 Φ φ /faɪ/ phi 弗爱/弗忆 磁通,角,透镜焦度,热流量
22 Χ χ /kaɪ/ chi 凯/柯义 统计学中有卡方(χ^2)分布
23 Ψ ψ /psaɪ/ psi 赛/普赛/普西 角速,介质电通量,ψ函数
24 Ω ω /‘əʊmɪɡə/ /oʊ’meɡə/ omega 欧米伽/欧枚嘎 欧姆,角速度,交流电的电角度,化学中的质量分数; 概率论:必然事件、样本空间;

统计学中有卡方(χ^2)分布

i

利率%
印度 6.7
巴西 9.25
中国 4.6~5.20
美国 3.15
韩国 2.47
中国香港 2.25
中国台湾 1.82
德国 1.78
英国 1.45
日本 1.1
丹麦 -0.45%

房贷利率跟国家发展水平呈反比,经济越发达,房贷利率越低;(房地产价值越高?)

作者:欧亨利
链接:https://www.zhihu.com/question/518011120/answer/2435101797
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

房贷是银行贷给你的,那银行自己也有融资成本和风险成本,本身银行融资少说就2-3个点,到你身上加个运营成本和风险成本之类,以及必要的利润,不就5了吗?

西方发达国家房贷利率比较低主要是因为银行融资成本非常低。想想看,很多时候银行融资成本都几乎为0,因为联邦基金利率往往都在零左右徘徊,那到消费者手里其实主要还是风险,流动性,运营和利润一类的成本。

那问题又来了,为什么西方发达国家融资利率非常低?因为一个国家的总体利率水平和名义经济增长率息息相关,而发达国家经济增长率近几年来都非常低。经济增长率包括实际的经济增长率和通货膨胀率。银行贷款本质上是金融资本,它再剥削也不能比资本创造出来的利润大,所以如果资本创造出来的新生财富本来就不多,银行资本也攫取不了太多油水,利率自然就会偏低。

另外一个变量是通货膨胀率,通胀率越高,名义增长率越高,同时投资者避险需求大,固收投资的吸引力变低,利率自然会变高。今年大家也看到了,随着疫情供应链俄乌冲突爆发,全球通胀都有加速上行趋势,连日德的万年负利率长期国债都开始转正了。通胀驱动的利率上升往往是危险的,因为实际经济并没有增长,然而企业的融资负担变重了,金融市场就有了风险。

那如果利率水平和经济增长率不匹配会怎么样?如果利率水平高于经济增长率,也就是能赚钱的投资机会相对较少的情况,大部分人就不会愿意贷款投资,因为挣的钱还不够交利息的。现有的实体企业也会活受罪,因为利息成本太高了,被利息压垮最终就会暴雷。当愿意出借资金的规模大于愿意借入资金的规模时,出资人自然会想要下调利率水平,不然钱烂在手里也没用。所以这个时候利率会有一个自然下行的趋势。

如果利率水平低于经济增长率,也就是有利可图的投资机会太多了,就会有更多的人愿意贷款投资,经济会有过热风险。但因为愿意借入资金的规模太大,出资人显得比较少,他们肯定会愿意抬高利率(加价),这个时候利率会有自然上升的压力。

很多时候,经济周期形成的原因,就是在经济扩张时期,利率也水涨船高。但随着一些突发黑天鹅事件的爆发,经济突然进入短期萧条,高利率会进一步雪上加霜,造成更加长期的萧条。所以央行会在经济萧条时期人为降低利率,实际上是起到一个加速出清的作用,避免经济硬着陆。但在实践中央行干预经常落后曲线,把利率调得太低,经济表现过热,然后突然又提高利率,导致萧条提前出现。

所以长期来看,宏观来看,一个国家的整体利率水平一定是跟着名义经济增长率走的。房贷利率作为利率的一种表现形式,也符合这个规律。中国属于新兴市场发展中国家,目前的经济增长率还是要高于发达国家的,因此房贷利率自然也会更高。

假设中国目前的经济增长率是5-6%(我意思是假设),而如果包括房贷利率在内的整体利率水平调低到2-3%左右,这叫极度扩张性的货币政策,因为如果由市场力量自行调节,利率水平应该和经济增速差不多,在这个基础上利率再往下压需要人为注入大量流动性。我知道大部分人在这个利率水平依然买不起房,但这种时候月供是最不需要考虑的问题了,因为包括房价在内的各种资产价格在这种情况下会不受控制地大幅上涨。。然后利率会因为通货膨胀的影响而重新上升。

所以,房价高不高是另外一个问题。硬要说的话,房贷利率越高,房价实际上应该偏低。但利率毕竟不是决定房价的唯一因素,别的更重要的因素不在本文的讨论范围之内。

[TOC]

各种框架与TRT的转换关系

TF主题思想:Tensorflow->TensorRT(pb->uff)

Keras主体思想:Keras->ONNX->TensorRT(h5->onnx->engine)

pytorch主题思想:

  • Pytorch->jit->TensorRT(利用Forward框架加速Pytorch模型)
  • Pytorch->onnx->TensorRT(pth->onnx->engine)

ONNX 2 TRT

  • method-1 trtexec
  • method-2 onnx-tensorrt工具

ONNX - engine

  • TensorRT自带工具trtexec将onnx模型转化为engine模型。

  • 直接在代码中通过载入onnx模型并创建engine即可。

Onnx2trt

Method-1 trtexec

1
2
3
使用TensorRT的OSS工具
我的其中trtexec工具在/usr/src/tensorrt/bin/trtexec
–verbose,verbose打印日志看着能安心点
1
2
3
4
5
6
7
# fp32---noTF32 fp16---fp16 int8---int8
# set enviornment export PATH="$PATH:/usr/src/tensorrt/bin" sudo /usr/src/tensorrt/bin/trtexec
trtexec --explicitBatch=1 --onnx=/home/z/Documents/face_detect_yolov4_yolov4tiny_ssd-master/tools/yolov4-tiny.onnx --saveEngine=/home/z/Documents/face_detect_yolov4_yolov4tiny_ssd-master/yolov4-tiny-fp16.trt --fp16 --workspace=1 --verbose

trtexec --explicitBatch=1 --onnx=/home/z/Documents/face_detect_yolov4_yolov4tiny_ssd-master/tools/yolov4-tiny.onnx --saveEngine=/home/z/Documents/face_detect_yolov4_yolov4tiny_ssd-master/yolov4-tiny-fp32.trt --noTF32 --workspace=1 --verbose

trtexec --explicitBatch=1 --onnx=/home/z/Documents/face_detect_yolov4_yolov4tiny_ssd-master/tools/yolov4-tiny.onnx --saveEngine=/home/z/Documents/face_detect_yolov4_yolov4tiny_ssd-master/yolov4-tiny-int8.trt --int8 --workspace=1 --verbose

Method-2 onnx-tensorrt工具

https://github.com/onnx/onnx-tensorrt

1
2
3
4
5
6
7
8
9
$ git clone --recursive https://github.com/onnx/onnx-tensorrt.git
$ mkdir build
$ cd build
$ cmake .. -DTENSORRT_ROOT=/home/wt/download/TensorRT-5.1.5.0
or
# 根据GPU的实际计算能力,修改 DGPU_ARCHS 值
$ cmake .. -DTENSORRT_ROOT=/home/wt/download/TensorRT-5.1.5.0 -DGPU_ARCHS="61"
$ make -j8
$ sudo make install
1
2
3
4
5
6
通过 ONNX-TensorRT 工具,可以将 onnx 模型转换为 tensorrt 模型,如
$ onnx2trt my_model.onnx -o my_engine.trt
还可以将 onnx 模型转换为人们可读的txt文档
$ onnx2trt my_model.onnx -t my_model.onnx.txt
更多用法,输入
$ onnx2trt -h

Method-3 onnx-tensorrt库

方法3:使用以下代码(结合着改)

TensorRT 5/6/7 加载onnx模型 python

参考资料:

offical install guide

CSDN_ONNX与TensorRT的使用

  • Tensorflow->TensorRT(pb->uff)
  • Keras->ONNX->TensorRT(h5->onnx->engine)
  • Pytorch->jit->TensorRT

Jetson学习笔记(四):pth(torch模型文件)转trt(tensorrt引擎文件)实操

⭐Jetson 学习笔记(五)pb2uff,onnx2trt, pth2onnx,onnx2pb

TensorRT7 Onnx模型多batch问题解决

TensorRT 入门(5) TensorRT官方文档浏览

https://docs.nvidia.com/deeplearning/tensorrt/api/python_api/infer/Graph/Network.html?highlight=explicit_batch

[Pytorch导出ONNX一些不支持操作的解决] https://heroinlin.github.io/2018/08/15/Pytorch/Pytorch_export_onnx/

[pth->onnx->trt踩坑笔记1]https://blog.csdn.net/dragonfly91/article/details/113184797

[PyTorch2ONNX2TensorRT 踩坑日志]https://blog.csdn.net/github_28260175/article/details/103436020

分享 | 工业缺陷检测深度学习方法综述 原文

AIGC AIs

jasper AI

  网址:https://www.jasper.ai

  在可用的 AI 文案写作工具中,Jasper 作为那些寻求通过内容生成赚钱的人来讲,它是经济实惠且高效的选择之一。

  该工具精通短格式和长格式内容均能完成。

  Jasper 拥有一系列功能,包括无需切换到模板即可快速生成内容的命令、用于创建文章的高效长格式编辑器,以及包含有助于创建各种类型内容的向导的内容工作流,例如,博客文章、销售文案和重写。

  Jasper Chat 是该平台的一项特殊功能,它提供了 Google 搜索的替代方案,使 AI 能够使用可用的最新信息生成内容。

  此外,Jasper Art(下面有更多详细信息)是用于生成 AI 图像的令人印象深刻的功能。

  Jasper 的一个局限性是需要手动编辑来优化内容以吸引读者并超越 AI 检测工具。

  总的来说,Jasper 和 Content at Scale 仍然是最有用的 AI 文案工具之一。

  2. Jasper AI Art Generator

  网址:https://www.jasper.ai

  使用 Jasper Art Generator 释放您的内在艺术家并创造令人惊叹的视觉艺术作品。

  但是这个工具需要收费,每月20 美元,这样,您就可以使用这款人工智能软件生成无限的高质量图像,包括抽象艺术、风景和肖像。

  该工具基于 OpenAI 的 Dall-E-2 模型构建,使用任何输入数据来创建独特且引人注目的视觉效果,您可以将其用于装饰、营销甚至销售。

  Jasper Art 具有直观的用户界面,即使对于非艺术家也易于使用。

  通过一系列自定义选项,您可以选择自己喜欢的艺术风格、媒介、灯光等。

  另外,您可以调整修饰符以达到您想要的效果。释放 Jasper Art 全部潜力的关键是编写有效的 AI 提示。

  3. Frase AI

  网址:https://www.frase.io/

  Frase AI 是一种革命性的工具,可能是在内容世界中赚钱的缺失环节。它是博主和内容营销人员的理想选择,它拥有的功能可以将您的页面优化提升到一个新的水平。

  它最令人印象深刻的功能是能够优化您生成的内容,从热门搜索结果中汲取灵感。

  凭借受 SERP 启发的简介和大纲生成器、SEO 和内容规划工具以及内容优化工具,Frase AI 是您寻求在线成功的完美盟友。

  而且不止于此!您还将配备您期望从任何 AI 内容生成器获得的其他写作工具。

  它有一个免费使用7天的功能,结束后,需要付费使用。

  4. Writesonic

  网址:https://writesonic.com/

  在生成内容方面,Writesonic 是 Jasper AI 的重要竞争对手。该工具提供了一系列功能,可以生成短格式和长格式的内容。

  Chatsonic 是该平台的一项突出功能,类似于 Jasper Chat,它连接到互联网但具有更强大的 AI 功能。

  Writesonic 的 Premium Writer 4.0 能够通过单击生成 1500 多篇完整的文章,并具有更多自定义选项,例如语气、观点、关键字和最多 20 项的大纲。

  如果您正在寻找有用且可靠的内容生成工具,Writesonic 可能是您的绝佳选择。

  5. AISEO writer

  网址:https://aiseo.ai/

  AISEO 是一种具有成本效益的选择,可以作为 Frase 的替代品。

  但是,它需要收费,AISEO 每月需 15 美元起,按年计费。

  不过它的功能也是非常不错的,其中,包括:

  博文生成工具

  可读性 AI 改进器

  搜索引擎优化文件

  SERP 分析

  一次单击即可释义多达 50K 个字符

  强大的 AI 改写工具

  生成内容的 Chrome 插件

  目前,AISEO 提供终身优惠,每月 7 个 SEO 文档的起价为 67 美元,15 个 SEO 文档的起价为 147 美元,无限数量的文档起价为 397 美元。

  个人觉得收费有点贵了。

  6. ChatGPT

  网址:https://openai.com/blog/chatgpt/

  ChatGPT 可以算是目前最火的一款AI工具了。

  它由 OpenAI 的 GPT-3 和 GPT-3.5 模型提供支持,能够生成任何格式的内容,包括可执行的代码。

  让 ChatGPT 脱颖而出的是它独特的聊天查询能力,可以记住线程中以前的对话,使用集成的 Codex 模型创建代码行,并生成与人类编写的内容几乎没有区别的高质量文本。

  ChatGPT 的高级上下文和对话处理功能使其成为聊天机器人和其他对话系统的非常有价值的工具。

  但它不仅限于此,它还可以执行一系列自然语言处理任务,如语言翻译、文本摘要和问答。

  使用 ChatGPT,您可以轻松地为任何目的生成高质量的文本。

  告别繁琐的内容创建,让 ChatGPT 为您完成繁重的工作。

  目前,ChatGPT,还推出了付费版本,一个月需要20美元。不过没有用过,不知道怎么样,感觉收费有点高了,换成人民币,一个月就是100多元了。

  当然,目前中国地区不能用。

  7. Pictory AI

  网址:https://pictory.ai

  如果你正在寻找一种可靠的工具来制作品牌短片或病毒式传播视频,以帮助发展您的品牌并增加您的影响力?请来看看 Pictory AI。

  此工具具有功能强大的编辑器,可让您通过编辑脚本来修改视频。

  例如,您可以删除不需要的字词或短语以提高视频质量。

  Pictory AI是一款网页应用,无需下载,自动从Zoom、Webinars、Microsoft Teams等平台的录音中提取关键点。

  此工具还可以将脚本转换为高度转换的销售视频,将博客文章转换为 YouTube 视频,为您的视频添加字幕以提高可访问性,以及为社交媒体创建带字幕的视频。

  此外,Pictory AI 还提供以下功能:

  脚本到视频生成器

  博客到视频生成器

  能够使用文本编辑视频

  创建视频集锦

  自动总结长视频

  视频转录

  插入 B 卷

  您可以免费试用 Pictory AI,亲身体验这款强大的视频生成工具的优势。

  8. Synthesia

  网址:https://www.synthesia.io

  在AI视频生成方面,Synthesia是业内知名的先行者。该平台提供了一个直观的界面,可以简化任何人的视频创作。

  Synthesia 的 AI 化身用几乎与人类无异的声音为您的视频解说,并且有超过 65 名 AI 演员和 60 多种支持的语言可供选择,您无疑可以找到与您的品牌相符的声音。

  AI 头像非常逼真,Anna 是 Copymatic AI 和 Writecream 等公司最常使用的头像来制作解说视频。

  Synthesia 拥有一系列功能,包括多语言支持、视频复制以及合并 Synthesia 创建的视频的能力,无需单独的视频编辑器。

  此外,您可以自定义声音,甚至可以用真人声音代替合成声音。

  该平台还允许您使用自己的声音和自定义头像,并通过 API 访问将 Synthesia 的功能扩展到平台之外。

  但是,需要付费,每月 30 美元,您就可以将此工具用于个人计划,最多可以创建 10 个视频。

  9. Rephrase AI

  网址:https://www.rephrase.ai/

  如果您正在寻找一种工具来帮助您将脚本变成完整的解说视频,您可能想看看这个功能强大的视频创建工具。

  与 Synthesia 类似,它允许您上传脚本,选择您的 AI 解说员和相应的声音,然后只需点击几下即可生成解说视频。

  凭借一系列可自定义的功能,此工具可以帮助您创建引人入胜的个性化视频,真正吸引观众的注意力。

  凭借其自定义演员、CTA 标签、超逼真的演示者和个性化功能,您可以使用合并标签让 AI 拼出您联系人的姓名以增加影响力。

  此外,该工具还提供了一个视频编辑工作室,使您能够真正地转换您的内容并将您的视频提升到一个新的水平。

  10. Photosonic

  网址:https://photosonic.writesonic.com/

  Photosonic 是一种出色的 AI 艺术工具,类似于 Jasper Art Generator。

  它由 Writesonic 开发,使用 OpenAI 的语言模型轻松生成独特的数字艺术和令人惊叹的视觉效果。

  使用 Photosonic 可以轻松创建精美且高质量的图像。

  您所要做的就是提供有关您要创建的图像类型的基本信息,然后让 Photosonic 完成剩下的工作。

  从抽象设计到错综复杂的风景,Photosonic 可以生成范围广泛的数字艺术作品。

  它的功能包括一个内置的照片增强器,允许您下载生成的图像的高清版本。

  11、Midjourney

  https://www.midjourney.com

  Midjourney 是最近推出的 AI 艺术生成器,在艺术爱好者中迅速流行起来。

  使用自然语言处理,Midjourney 可以将基于文本的提示转换为惊人的超现实和逼真的图像。凭借其直观的用户界面和灵活的图像变化选项,该工具非常适合那些喜欢尝试创意的人。

  要使用 Midjourney,您需要拥有一个 Discord 帐户并请求访问该工具的测试版。

  获得访问权限后,导航至 Midjourney 频道并进入其中一个新人房间以开始生成图像。

  只需使用 /imagine 命令输入您想要的提示,然后让 Midjourney 为您创建一个独特的个性化图像。

  为增强您的体验,请使用 /help 命令获取有关如何更好地使用该平台的提示,以及可让您更好地控制生成的图像的各种可用命令。

  凭借其强大的图像放大功能,Midjourney 的图像已准备好用于商业应用,例如按需印刷产品。

  12. WordAi

  如果您需要改写您的内容,那么您可能需要考虑 WordAI,它是一款强大的人工智能工具,支持改写。

  它可以通过从不同角度处理同一消息、拆分句子和段落以及提高写作质量和清晰度来帮助您丰富内容。

  WordAI 与其他重写工具的不同之处在于它不只是用同义词替换单词。

  它理解句子的意思,然后从头开始重写概念,确保可读性保持不变。

  该工具可为一件内容生成多达 1,000 个独特的变体,通过其批量重写功能让您一次上传所有内容,从而节省您的时间。

  此外,它与 Article Forge 集成并提供 API 访问,允许您将其与您的工作流程无缝集成。

  13. QuillBot

  网址:https://quillbot.com/

  QuillBot 是一个非常受欢迎的重写工具。

  它有五种不同的模式:Standard、Fluency、Formal、Simple 和 Creative,每种模式最多可以生成 5 种改写内容变体。

  除了重写,QuillBot 还提供了一个 AI 内容摘要器、一个共同作者工具以及语法和剽窃检测工具,您也可以直接生成引文。

  最好的部分是,您可以通过订阅 QuillBot Pro 来访问所有这些功能,每月需要 10 美元,如果您选择包年套餐,则费用更低。

  14.Copymatic Rewriter

  网址:https://www.frugalforless.com

  借助 Copymatic,您可以访问复杂的 AI 内容生成器,以及利用先进 AI 技术的强大重写向导。

  此 AI 改写器允许您自定义创意水平或语调,以生成准确反映您品牌形象的内容。

  不仅如此,重新制作的内容还经过精心优化以实现最大参与度,确保您的信息与目标受众产生共鸣。

  使用我们的创新工具,您甚至可以重写 URL 中的内容,从而简化为您的网站或博客创建引人入胜的新鲜内容的过程。

  此外,我们的 AI 改写器可以轻松处理长篇内容,确保您的作品以提高清晰度和影响力的方式进行改写。

  15. Semrush

  网址:https://www.semrush.com/

  想要提升您的在线形象?只需看看 Semrush,这是一款物有所值的强大关键字研究工具。

  Semrush 拥有超过 55 种工具的强大套件,拥有您进行内容营销、在竞争中脱颖而出并征服 SEO、PPC 和社交媒体世界所需的一切。

  在其众多功能中,Semrush 可以帮助您挖掘低竞争关键字来定位、跟踪您的每日 SERP 位置,并进行技术 SEO 审核,让您的竞争对手望尘莫及。

  此外,借助触手可及的实时指标,您可以改进现有内容并发现隐藏的关键字和主题差距,从而使您的策略更上一层楼。

  16. SERanking(更实惠的关键字研究软件)

  网址:https://seranking.com/

  如果您不想每月为 SEO 服务支付 119.95 美元,那么,我想您应该会想尝试一下 SERanking。

  该平台提供了成功搜索引擎优化所需的所有基本功能,包括高效的关键词研究。

  它类似于 Semrush,但具有更简单的界面,即使对于像我们这样的休闲博主来说也是用户友好的。

  但是,它目前起价为每月 23 美元。

  以下是您可以使用 SERanking 享受的一些突出功能:

  针对所有目标关键字的高度精确的搜索指标

  全面的网站审核,提供有用的、可操作的建议

  深入的反向链接检查和监控

  能够监控您感兴趣的任何网站上的变化

  全面的页面优化工具,帮助提升您的 SEO 工作

  智能分析和自动发布工具,优化您的社交媒体渠道

  高级关键字分组工具

  多种 SEO 报告工具

  当然,它有免费试用,你可以去亲自体验一下。

  17. Stock Photos Upscaler

  网址:https://upscaler.stockphotos.com/

  使用 AI 艺术工具生成图像后,需要注意的是图像的质量和分辨率不高。

  为了使它们适合商业用途,例如,在按需印刷产品中,您需要通过升级来增强它们。

  Upscaler 是一个强大的工具,用于放大图像并确保它们符合所需的标准。使用 Upscaler 提高 AI 生成图像的质量。

SLAM(simultaneous localization and mapping)

即时定位与地图构建

SLAM 架构图

image-20220530211142268

1、传感器信息读取

2、视觉里程计(Visual Odometry,VO)

​ VO又称为前端(Front End)。

  • 估计两张图之间的运动,存在误差,也就是漂移(Drift)

3、后端优化

4、回环检测(Loop Closing)

5、Mapping

前端 后端优化 回环检测
图像特征提取,匹配 滤波与非线性算法,
估计状态的均值和不确定性(方差)
解决位置估计随时间飘移问题
6,10,11

运动方程

$$
x_k = f (x_{k-1}, u_k, w_k)
$$

$u_k$ 运动传感器的读数, $w_k$ 噪声

观测方程:

​ 在 $x_k$位置上,看到了某个路标点$y_j$,产生了一个观测数据 $Z_{k,j}$

$$
z_{k,j} = h(y_i, x_k, v_{k,j})
$$

线性高斯系统(Linear Gaussian,LG系统)| 卡尔曼滤波器(Kalman Filter,KF)

非线性非高斯系统(Non-Linear Non-Gaussian,NLNG系统) | 扩展卡尔曼滤波器(Extended Kalman Filter,EKF),非线性优化

使用粒子滤波器(Particle Filter)等其他滤波器,乃至使用非线性优化的方法

主流视觉SLAM使用以图优化(Graph Optimization)为代表的优化技术进行状态估计

优化技术已经明显优于滤波器技术,只要计算资源允许,通常都偏向于使用优化方法(见第10讲和第11讲)。

特点 场景
Monocular单目 单目相机只能获取图像的像素信息,因此需要借助相机运动、通过匹配不同视角的图像特征点以及三角测量的方式计算出深度信息。好处是传感器简单、成本低,最有可能产品化。
Stereo双目 双目方式是使用两个具有固定间隔的相机采集同一场景的图片,通过这个两个相机之间的视差值计算出像素点的深度信息。双目相机本质上就是两个相对位置固定的单目相机,双目与单目计算像素深度的方式在本质上也是相同的。双目方式简化了单目计算流程,但是计算仍十分耗时、不适用于缺乏纹理结构的场景。 不适用缺乏纹理的场景
RGBD深度相机 RGB-D方式是通过物理方式(红外结构光或TOF)直接测量像素点对应的深度值,避免了单目、双目计算深度的过程,降低了计算成本,但问题是测量范围过小、易受噪声影响,且视野过小,通常用于室内场景,不能应用于室外和大范围场景。 适合室内场景,通常不能应用于室外和大范围场景

资料

SLAM_文科升的博客-CSDN博客

ORB-SLAM2代码阅读笔记(十):sim3求解_sim3位姿-CSDN博客

(深大) 视觉SLAM十四讲学习笔记-第五讲-图像和实践 Zhihu

单应性变换、基本矩阵、本质矩阵的区别和联系-涂涂-CSDN博客

[TOC]

头文件

#include

1
2
3
4
5
6
7
random_shuffle();

char s[4];
random_shuffle(s, s+4);

vector s;
random_shuffle(s.begin(), s.end());

#include <string.h>

1
2
strlen
strsep

使用以下几种函数判断文件是否存在

  1. #include <fstream> –> 使用ifstream打开文件流,成功则存在,失败则不存在;
  2. #include <stdio.h> –> 以fopen读方式打开文件,成功则存在,否则不存在;
  3. #include <unistd.h> –> 使用access函数获取文件状态,成功则存在,否则不存在
  4. #include <sys/stat.h> –> 使用stat函数获取文件状态,成功则存在,否则不存在
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <sys/stat.h>
#include <unistd.h>
#include <fstream>
#include <string>
#include <iostream>

using namespace std;
bool isFileExists_ifstream(string& name) {
ifstream f(name.c_str());
return f.good();
}
bool isFileExists_fopen(string& name) {
if (FILE *file = fopen(name.c_str(), "r")) {
fclose(file);
return true;
} else {
return false;
}
}
bool isFileExists_access(string& name) {
return (access(name.c_str(), F_OK ) != -1 );
}
// 性能最佳
bool isFileExists_stat(string& name) {
struct stat buffer;
return (stat(name.c_str(), &buffer) == 0);
}

python c-api

https://docs.python.org/zh-cn/3.10/c-api/long.html

共享库Open

在C++中,dlopen()函数用于动态加载库(也称为共享库)。该函数的原型如下:

1
cpp复制代码void* dlopen(const char* filename, int flag);

其中,filename参数指定要加载的库的文件名,flag参数指定加载库的方式。

RTLD_LAZY,RTLD_LOCALRTLD_DEEPBINDflag参数选项,它们的作用如下:

  • RTLD_LAZY:使用该选项时,库中的函数和变量在第一次使用时才会被解析。也就是说,如果在库中引用了某个函数或变量,那么在加载库时不会立即解析它。而是在第一次调用该函数或使用该变量时,才会进行解析。这种方式被称为懒加载。
  • RTLD_LOCAL:使用该选项时,库中的函数和变量对于调用程序来说是局部的。这意味着在库中定义的函数和变量不会与全局命名空间中的同名函数和变量冲突。这种方式有助于避免命名冲突的问题。
  • RTLD_DEEPBINDdlopen()函数的选项之一,它的含义是:在加载共享库时,将该库的符号查找范围置于该库的符号表中,而不是全局符号表中。也就是说,当在共享库中使用符号时,会优先在该库自己的符号表中查找,而不是去全局符号表中查找。这种选项有助于解决符号冲突的问题。

选项可以组合使用,例如RTLD_LAZY | RTLD_LOCAL | RTLD_DEEPBIND,表示既使用懒加载方式加载库,又将库中的函数和变量定义为局部的, 以及…。

需要注意的是,dlopen()函数在不同的操作系统和平台上可能有所不同,具体的用法和选项可能会有所差异。因此,在使用时需要参考相应平台和系统的文档。

Guide

在 C++ 中打包共享对象(SO)库,特别是用于 Linux 系统时,接口参数的选择非常重要。为了确保与不同语言和环境的良好兼容性,通常建议使用 C 兼容的数据类型作为 SO 库的接口参数。以下是一些推荐使用的数据类型和结构:

1. 基本数据类型

  • intlongshortchar:整数类型
  • floatdouble:浮点数类型
  • void*:通用指针类型,可以用来传递任意类型的指针

2. 字符串

  • const char* 或 char*:C 风格字符串
  • 注意:避免直接使用 C++ 的 std::string,因为不同编译器可能有不同的实现,导致 ABI(应用程序二进制接口)不兼容。

3. 数组

  • 使用固定大小或动态大小的数组(通过指针和长度参数传递)
1
void processArray(int* array, size_t length);

4. 结构体

  • 定义简单的 C 结构体来封装多个值
1
2
3
4
5
6
typedef struct {
int x;
float y;
} Point;

void processPoint(const Point* point);

5. 回调函数

  • 使用函数指针来支持回调机制
1
2
3
typedef void (*CallbackFunc)(const char* message);

void registerCallback(CallbackFunc callback);

6. 枚举

  • 使用枚举类型来定义一组常量
1
2
3
4
5
6
typedef enum {
STATUS_OK,
STATUS_ERROR
} Status;

Status checkStatus();

7. 联合体 (Union)

  • 使用联合体来表示多态性或不同类型的数据
1
2
3
4
5
6
typedef union {
int intValue;
float floatValue;
} Variant;

void processVariant(const Variant* variant, int type);

8. 文件描述符

  • 对于需要处理文件的操作,可以使用文件描述符(int 类型)
1
void processFile(int fd);

9. 不透明指针

  • 使用不透明指针隐藏复杂的数据结构,仅暴露必要的操作函数
1
2
3
4
5
typedef void* Handle;

Handle createHandle();
void destroyHandle(Handle handle);
void doSomething(Handle handle);

10. 自定义类型

  • 如果必须使用更复杂的 C++ 类型(如 std::vectorstd::string),则应提供包装函数以转换为 C 兼容的类型。
1
2
3
4
5
6
extern "C" {
void processVector(const int* data, size_t size) {
std::vector<int> vec(data, data + size);
// ... 处理 vector ...
}
}

注意事项

  • extern "C":确保所有导出的函数都包裹在 extern "C" 块中,以防止 C++ 编译器对符号进行名称修饰。
1
2
3
extern "C" {
// 函数声明
}
  • 线程安全:如果 SO 库将在多线程环境中使用,请确保任何共享资源都是线程安全的。
  • 内存管理:明确谁负责分配和释放内存,尤其是在跨语言边界传递指针时。
  • 错误处理:考虑如何处理和报告错误。可以使用返回码、全局变量或回调函数等方式。

通过遵循这些指导原则,你可以创建一个稳定且易于集成的 C++ SO 库,该库可以在多种编程语言和环境中使用。如果你有特定的需求或遇到了具体问题,请提供更多细节,以便给出更详细的建议。