关于代币增发复利DAPP模式制度系统开发逻辑分析(原理概念)

简介: 关于代币增发复利DAPP模式制度系统开发逻辑分析(原理概念)

heco生态链 Huobi HECO Chain(HECO)是一个去中心化高效节能公链,也是huo币开放平台推出的产品,在支撑高性能交易得基础上,实现智能合约的兼容,heco链智能合约dapp,案例演示。

我们把关键帧和PnP的结果都封成了结构体,以便将来别的程序调用。这两个函数的实现如下:

  src/slamBase.cpp

1 // computeKeyPointsAndDesp 同时提取关键点与特征描述子
2 void computeKeyPointsAndDesp( FRAME& frame, string detector, string descriptor )
3 {
4 cv::Ptr<cv::FeatureDetector> _detector;
5 cv::Ptr<cv::DescriptorExtractor> _descriptor;
6
7 cv::initModule_nonfree();
8 _detector = cv::FeatureDetector::create( detector.c_str() );
9 _descriptor = cv::DescriptorExtractor::create( descriptor.c_str() );
10
11 if (!_detector || !_descriptor)
12 {
13 cerr<<"Unknown detector or discriptor type !"<<detector<<","<<descriptor<<endl;
14 return;
15 }
16
17 _detector->detect( frame.rgb, frame.kp );
18 _descriptor->compute( frame.rgb, frame.kp, frame.desp );
19
20 return;
21 }
22
23 // estimateMotion 计算两个帧之间的运动
24 // 输入:帧1和帧2
25 // 输出:rvec 和 tvec
26 RESULT_OF_PNP estimateMotion( FRAME& frame1, FRAME& frame2, CAMERA_INTRINSIC_PARAMETERS& camera )
27 {
28 static ParameterReader pd;
29 vector< cv::DMatch > matches;
30 cv::FlannBasedMatcher matcher;
31 matcher.match( frame1.desp, frame2.desp, matches );
32
33 cout<<"find total "<<matches.size()<<" matches."<<endl;
34 vector< cv::DMatch > goodMatches;
35 double minDis = 9999;
36 double good_match_threshold = atof( pd.getData( "good_match_threshold" ).c_str() );
37 for ( size_t i=0; i<matches.size(); i++ )
38 {
39 if ( matches[i].distance < minDis )
40 minDis = matches[i].distance;
41 }
42
43 for ( size_t i=0; i<matches.size(); i++ )
44 {
45 if (matches[i].distance < good_match_threshold*minDis)
46 goodMatches.push_back( matches[i] );
47 }
48
49 cout<<"good matches: "<<goodMatches.size()<<endl;
50 // 第一个帧的三维点
51 vector<cv::Point3f> pts_obj;
52 // 第二个帧的图像点
53 vector< cv::Point2f > pts_img;
54
55 // 相机内参
56 for (size_t i=0; i<goodMatches.size(); i++)
57 {
58 // query 是第一个, train 是第二个
59 cv::Point2f p = frame1.kp[goodMatches[i].queryIdx].pt;
60 // 获取d是要小心!x是向右的,y是向下的,所以y才是行,x是列!
61 ushort d = frame1.depth.ptr( int(p.y) )[ int(p.x) ];
62 if (d == 0)
63 continue;
64 pts_img.push_back( cv::Point2f( frame2.kp[goodMatches[i].trainIdx].pt ) );
65
66 // 将(u,v,d)转成(x,y,z)
67 cv::Point3f pt ( p.x, p.y, d );
68 cv::Point3f pd = point2dTo3d( pt, camera );
69 pts_obj.push_back( pd );
70 }
71
72 double camera_matrix_data3 = {
73 {camera.fx, 0, camera.cx},
74 {0, camera.fy, camera.cy},
75 {0, 0, 1}
76 };
77
78 cout<<"solving pnp"<<endl;
79 // 构建相机矩阵
80 cv::Mat cameraMatrix( 3, 3, CV_64F, camera_matrix_data );
81 cv::Mat rvec, tvec, inliers;
82 // 求解pnp
83 cv::solvePnPRansac( pts_obj, pts_img, cameraMatrix, cv::Mat(), rvec, tvec, false, 100, 1.0, 100, inliers );
84
85 RESULT_OF_PNP result;
86 result.rvec = rvec;
87 result.tvec = tvec;
88 result.inliers = inliers.rows;
89
90 return result;
91 }
复制
  此外,我们还实现了一个简单的参数读取类。这个类读取一个参数的文本文件,能够以关键字的形式提供文本文件中的变量:

  include/slamBase.h

1 // 参数读取类
2 class ParameterReader
3 {
4 public:
5 ParameterReader( string filename="./parameters.txt" )
6 {
7 ifstream fin( filename.c_str() );
8 if (!fin)
9 {
10 cerr<<"parameter file does not exist."<<endl;
11 return;
12 }
13 while(!fin.eof())
14 {
15 string str;
16 getline( fin, str );
17 if (str[0] == '#')
18 {
19 // 以‘#’开头的是注释
20 continue;
21 }
22
23 int pos = str.find("=");
24 if (pos == -1)
25 continue;
26 string key = str.substr( 0, pos );
27 string value = str.substr( pos+1, str.length() );
28 data[key] = value;
29
30 if ( !fin.good() )
31 break;
32 }
33 }
34 string getData( string key )
35 {
36 map<string, string>::iterator iter = data.find(key);
37 if (iter == data.end())
38 {
39 cerr<<"Parameter name "<<key<<" not found!"<<endl;
40 return string("NOT_FOUND");
41 }
42 return iter->second;
43 }
44 public:
45 map<string, string> data;
46 };

相关文章
|
11月前
|
存储 JSON API
作为开发者,我如何提高任务型大模型应用的响应性能
本文基于实际场景,分享了作为开发者提高大模型响应性能的四个实用方法。
1950 57
|
Linux Shell
28. 【Linux教程】删除环境变量
28. 【Linux教程】删除环境变量
436 0
|
消息中间件 Kafka 测试技术
【Kafka揭秘】Leader选举大揭秘!如何打造一个不丢失消息的强大Kafka集群?
【8月更文挑战第24天】Apache Kafka是一款高性能分布式消息系统,利用分区机制支持数据并行处理。每个分区含一个Leader处理所有读写请求,并可有多个副本确保数据安全与容错。关键的Leader选举机制保障了系统的高可用性和数据一致性。选举发生于分区创建、Leader故障或被手动移除时。Kafka提供多种选举策略:内嵌机制自动选择最新数据副本为新Leader;Unclean选举快速恢复服务但可能丢失数据;Delayed Unclean选举则避免短暂故障下的Unclean选举;Preferred选举允许基于性能或地理位置偏好指定特定副本为首选Leader。
326 5
|
机器学习/深度学习 网络协议 算法
IGP高级特性(一)
IGP高级特性(一)
|
Unix Python Windows
深入了解Python中的os.path.join函数
探索Python `os.path.join` 函数:用于跨平台拼接路径,自动处理分隔符,支持绝对/相对路径及特殊字符。了解其基本用法、异常处理和最佳实践,提升文件路径操作的可靠性与可移植性。查阅[Python官方文档](https://docs.python.org/3/library/os.path.html)获取更多详情。
1313 0
|
机器学习/深度学习 算法 固态存储
MFDS-DETR开源 | HS-FPN多级特征融合+Deformable Self-Attention,再续DETR传奇
MFDS-DETR开源 | HS-FPN多级特征融合+Deformable Self-Attention,再续DETR传奇
1321 0
|
消息中间件 存储 监控
一文教你理解Kafka offset
offset 是 Kafka 为每条消息分配的一个唯一的编号,它表示消息在分区中的顺序位置。offset 是从 0 开始的,每当有新的消息写入分区时,offset 就会加 1。offset 是不可变的,即使消息被删除或过期,offset 也不会改变或重用。
1778 0
|
存储 大数据
大数据数据存储的分布式文件系统的HDFS的核心机制理解的数据复制和原理
在 Hdfs 中,数据的复制和原理是基于块的分布式存储。
207 1
|
Prometheus Kubernetes Cloud Native
基于OpenTelemetry进行全链路追踪
Hello folks,我是 Luga,今天我们来分享一下与云原生体系有关的话题- 云原生可观测性-OpenTelemetry。 作为一个云原生“核心”标准,OpenTelemetry在观测分布式微服务应用程序和云基础设施的可见性和控制自动化层面具有举足轻重的意义。
1099 0
九、Docker-Compose常用命令
九、Docker-Compose常用命令