前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >手眼标定算法Tsai-Lenz代码实现(Python、C++、Matlab)

手眼标定算法Tsai-Lenz代码实现(Python、C++、Matlab)

作者头像
全栈程序员站长
发布于 2022-08-31 02:04:12
发布于 2022-08-31 02:04:12
1.7K04
代码可运行
举报
运行总次数:4
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

你好,我是小智。

上一节介绍了手眼标定算法Tsai的原理,这一节介绍算法的代码实现,分别有Python、C++、Matlab版本的算法实现方式。

  • 该算法适用于将相机装在手抓上和将相机装在外部两种情况
  • 论文已经传到git上,地址:https://gitee.com/ohhuo/handeye-tsai

如果你要进行手眼标定,可以参考我的其他文章:

如果上述程序使用过程中遇到问题,可以参考:

如果你对手眼标定原理感兴趣,可以参考以下文章:

Python版本

使用前需要安装库:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip3 install transforms3d
pip3 install numpy
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/env python
# coding: utf-8
import transforms3d as tfs
import numpy as np
import math

def get_matrix_eular_radu(x,y,z,rx,ry,rz):
    rmat = tfs.euler.euler2mat(math.radians(rx),math.radians(ry),math.radians(rz))
    rmat = tfs.affines.compose(np.squeeze(np.asarray((x,y,z))), rmat, [1, 1, 1])
    return rmat

def skew(v):
    return np.array([[0,-v[2],v[1]],
                     [v[2],0,-v[0]],
                     [-v[1],v[0],0]])

def rot2quat_minimal(m):
    quat =  tfs.quaternions.mat2quat(m[0:3,0:3])
    return quat[1:]

def quatMinimal2rot(q):
    p = np.dot(q.T,q)
    w = np.sqrt(np.subtract(1,p[0][0]))
    return tfs.quaternions.quat2mat([w,q[0],q[1],q[2]])

hand = [1.1988093940033604, -0.42405585264804424, 0.18828251788562061, 151.3390418721659, -18.612399542280507, 153.05074895025035,
        1.1684831621733476, -0.183273375514656, 0.12744868246620855, -161.57083804238462, 9.07159838346732, 89.1641128844487,
        1.1508343174145468, -0.22694301453461405, 0.26625166858469146, 177.8815855486261, 0.8991159570568988, 77.67286224959672]
camera = [-0.16249272227287292, -0.047310635447502136, 0.4077761471271515, -56.98037030812389, -6.16739631361851, -115.84333735802369,
          0.03955405578017235, -0.013497642241418362, 0.33975949883461, -100.87129330834215, -17.192685528625265, -173.07354634882094,
          -0.08517949283123016, 0.00957852229475975, 0.46546608209609985, -90.85270962096058, 0.9315977976503153, 175.2059707654342]


Hgs,Hcs = [],[]
for i in range(0,len(hand),6):
    Hgs.append(get_matrix_eular_radu(hand[i],hand[i+1],hand[i+2],hand[i+3],hand[i+4],hand[i+5]))    
    Hcs.append(get_matrix_eular_radu(camera[i],camera[i+1],camera[i+2],camera[i+3],camera[i+4],camera[i+5]))

Hgijs = []
Hcijs = []
A = []
B = []
size = 0
for i in range(len(Hgs)):
    for j in range(i+1,len(Hgs)):
        size += 1
        Hgij = np.dot(np.linalg.inv(Hgs[j]),Hgs[i])
        Hgijs.append(Hgij)
        Pgij = np.dot(2,rot2quat_minimal(Hgij))
        
        Hcij = np.dot(Hcs[j],np.linalg.inv(Hcs[i]))
        Hcijs.append(Hcij)
        Pcij = np.dot(2,rot2quat_minimal(Hcij))
        
        A.append(skew(np.add(Pgij,Pcij)))
        B.append(np.subtract(Pcij,Pgij))
MA = np.asarray(A).reshape(size*3,3)
MB = np.asarray(B).reshape(size*3,1)
Pcg_  =  np.dot(np.linalg.pinv(MA),MB)
pcg_norm = np.dot(np.conjugate(Pcg_).T,Pcg_)
Pcg = np.sqrt(np.add(1,np.dot(Pcg_.T,Pcg_)))
Pcg = np.dot(np.dot(2,Pcg_),np.linalg.inv(Pcg))
Rcg = quatMinimal2rot(np.divide(Pcg,2)).reshape(3,3)


A = []
B = []
id = 0
for i in range(len(Hgs)):
    for j in range(i+1,len(Hgs)):
        Hgij = Hgijs[id]
        Hcij = Hcijs[id]
        A.append(np.subtract(Hgij[0:3,0:3],np.eye(3,3)))
        B.append(np.subtract(np.dot(Rcg,Hcij[0:3,3:4]),Hgij[0:3,3:4]))
        id += 1

MA = np.asarray(A).reshape(size*3,3)
MB = np.asarray(B).reshape(size*3,1)
Tcg = np.dot(np.linalg.pinv(MA),MB).reshape(3,)
print(tfs.affines.compose(Tcg,np.squeeze(Rcg),[1,1,1]))

运行结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python3 tsai.py                             
[[-0.01522186 -0.99983174 -0.01023609 -0.02079774]
 [ 0.99976822 -0.01506342 -0.01538198  0.00889827]
 [ 0.0152252  -0.01046786  0.99982929  0.08324514]
 [ 0.          0.          0.          1.        ]]

C++版本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//Reference:
//R. Y. Tsai and R. K. Lenz, "A new technique for fully autonomous and efficient 3D robotics hand/eye calibration."
//In IEEE Transactions on Robotics and Automation, vol. 5, no. 3, pp. 345-358, June 1989.
//C++ code converted from Zoran Lazarevic's Matlab code:
//http://lazax.com/www.cs.columbia.edu/~laza/html/Stewart/matlab/handEye.m
static void calibrateHandEyeTsai(const std::vector<Mat>& Hg, const std::vector<Mat>& Hc,Mat& R_cam2gripper, Mat& t_cam2gripper)
{ 
   
    //Number of unique camera position pairs
    int K = static_cast<int>((Hg.size()*Hg.size() - Hg.size()) / 2.0);
    //Will store: skew(Pgij+Pcij)
    Mat A(3*K, 3, CV_64FC1);
    //Will store: Pcij - Pgij
    Mat B(3*K, 1, CV_64FC1);

    std::vector<Mat> vec_Hgij, vec_Hcij;
    vec_Hgij.reserve(static_cast<size_t>(K));
    vec_Hcij.reserve(static_cast<size_t>(K));

    int idx = 0;
    for (size_t i = 0; i < Hg.size(); i++)
    { 
   
        for (size_t j = i+1; j < Hg.size(); j++, idx++)
        { 
   
            //Defines coordinate transformation from Gi to Gj
            //Hgi is from Gi (gripper) to RW (robot base)
            //Hgj is from Gj (gripper) to RW (robot base)
            Mat Hgij = homogeneousInverse(Hg[j]) * Hg[i]; //eq 6
            vec_Hgij.push_back(Hgij);
            //Rotation axis for Rgij which is the 3D rotation from gripper coordinate frame Gi to Gj
            Mat Pgij = 2*rot2quatMinimal(Hgij);

            //Defines coordinate transformation from Ci to Cj
            //Hci is from CW (calibration target) to Ci (camera)
            //Hcj is from CW (calibration target) to Cj (camera)
            Mat Hcij = Hc[j] * homogeneousInverse(Hc[i]); //eq 7
            vec_Hcij.push_back(Hcij);
            //Rotation axis for Rcij
            Mat Pcij = 2*rot2quatMinimal(Hcij);

            //Left-hand side: skew(Pgij+Pcij)
            skew(Pgij+Pcij).copyTo(A(Rect(0, idx*3, 3, 3)));
            //Right-hand side: Pcij - Pgij
            Mat diff = Pcij - Pgij;
            diff.copyTo(B(Rect(0, idx*3, 1, 3)));
        }
    }

    
    
    Mat Pcg_;
    //Rotation from camera to gripper is obtained from the set of equations:
    // skew(Pgij+Pcij) * Pcg_ = Pcij - Pgij (eq 12)
    solve(A, B, Pcg_, DECOMP_SVD);

    Mat Pcg_norm = Pcg_.t() * Pcg_;
    //Obtained non-unit quaternion is scaled back to unit value that
    //designates camera-gripper rotation
    Mat Pcg = 2 * Pcg_ / sqrt(1 + Pcg_norm.at<double>(0,0)); //eq 14

    Mat Rcg = quatMinimal2rot(Pcg/2.0);

    idx = 0;
    for (size_t i = 0; i < Hg.size(); i++)
    { 
   
        for (size_t j = i+1; j < Hg.size(); j++, idx++)
        { 
   
            //Defines coordinate transformation from Gi to Gj
            //Hgi is from Gi (gripper) to RW (robot base)
            //Hgj is from Gj (gripper) to RW (robot base)
            Mat Hgij = vec_Hgij[static_cast<size_t>(idx)];
            //Defines coordinate transformation from Ci to Cj
            //Hci is from CW (calibration target) to Ci (camera)
            //Hcj is from CW (calibration target) to Cj (camera)
            Mat Hcij = vec_Hcij[static_cast<size_t>(idx)];

            //Left-hand side: (Rgij - I)
            Mat diff = Hgij(Rect(0,0,3,3)) - Mat::eye(3,3,CV_64FC1);
            diff.copyTo(A(Rect(0, idx*3, 3, 3)));

            //Right-hand side: Rcg*Tcij - Tgij
            diff = Rcg*Hcij(Rect(3, 0, 1, 3)) - Hgij(Rect(3, 0, 1, 3));
            diff.copyTo(B(Rect(0, idx*3, 1, 3)));
        }
    }

    Mat Tcg;
    //Translation from camera to gripper is obtained from the set of equations:
    // (Rgij - I) * Tcg = Rcg*Tcij - Tgij (eq 15)
    solve(A, B, Tcg, DECOMP_SVD);

    R_cam2gripper = Rcg;
    t_cam2gripper = Tcg;
}

C++版本食用方法:

终端指令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone https://gitee.com/ohhuo/handeye-tsai.git   
cd handeye-tsai/cpp     
mkdir build   
cd build
cmake ..   
make
./opencv_example 

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sangxin@sangxin-ubu~ git clone https://gitee.com/ohhuo/handeye-tsai.git      
                                                                                               
正克隆到 'handeye-tsai'...
remote: Enumerating objects: 60, done.
remote: Counting objects: 100% (60/60), done.
remote: Compressing objects: 100% (57/57), done.
remote: Total 60 (delta 9), reused 0 (delta 0), pack-reused 0
展开对象中: 100% (60/60), 完成.

sangxin@sangxin-ubu~ cd handeye-tsai/cpp                                                                                                                          
sangxin@sangxin-ubu~ mkdir build   
sangxin@sangxin-ubu~ cd build
sangxin@sangxin-ubu~ cmake ..        
                                                                                                                                                                                               
-- The C compiler identification is GNU 7.5.0
-- The CXX compiler identification is GNU 7.5.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found OpenCV: /usr/local (found version "4.5.1") 
-- OpenCV library status:
--     config: /usr/local/lib/cmake/opencv4
--     version: 4.5.1
--     libraries: opencv_calib3d;opencv_core;opencv_dnn;opencv_features2d;opencv_flann;opencv_gapi;opencv_highgui;opencv_imgcodecs;opencv_imgproc;opencv_ml;opencv_objdetect;opencv_photo;opencv_stitching;opencv_video;opencv_videoio
--     include path: /usr/local/include/opencv4
-- Configuring done
-- Generating done
-- Build files have been written to: /home/sangxin/code/ramp/other/handeye-tsai/cpp/build

sangxin@sangxin-ubu~ make     
                                                                                                          
Scanning dependencies of target opencv_example
[ 33%] Building CXX object CMakeFiles/opencv_example.dir/example.cpp.o
[ 66%] Building CXX object CMakeFiles/opencv_example.dir/calibration_handeye.cpp.o
[100%] Linking CXX executable opencv_example
[100%] Built target opencv_example

sangxin@sangxin-ubu~ ./opencv_example  
                                                                                                 
Hand eye calibration
[0.02534592279128711, -0.999507800830298, -0.01848621857599331, 0.03902588103574497;
 0.99953544041497, 0.02502485833258339, 0.01739712102291752, 0.002933439485668206;
 -0.01692594317342544, -0.01891857671220042, 0.9996777480282706, -0.01033683416650518;
 0, 0, 0, 1]
Homo_cam2gripper 是否包含旋转矩阵:1

Matlab版本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
% handEye - performs hand/eye calibration
% 
%     gHc = handEye(bHg, wHc)
% 
%     bHg - pose of gripper relative to the robot base..
%           (Gripper center is at: g0 = Hbg * [0;0;0;1] )
%           Matrix dimensions are 4x4xM, where M is ..
%           .. number of camera positions. 
%           Algorithm gives a non-singular solution when ..
%           .. at least 3 positions are given
%           Hbg(:,:,i) is i-th homogeneous transformation matrix
%     wHc - pose of camera relative to the world ..      
%           (relative to the calibration block)
%           Dimension: size(Hwc) = size(Hbg)
%     gHc - 4x4 homogeneous transformation from gripper to camera      
%           , that is the camera position relative to the gripper.
%           Focal point of the camera is positioned, ..
%           .. relative to the gripper, at
%                 f = gHc*[0;0;0;1];
%           
% References: R.Tsai, R.K.Lenz "A new Technique for Fully Autonomous 
%           and Efficient 3D Robotics Hand/Eye calibration", IEEE 
%           trans. on robotics and Automaion, Vol.5, No.3, June 1989
%
% Notation: wHc - pose of camera frame (c) in the world (w) coordinate system
%                 .. If a point coordinates in camera frame (cP) are known
%                 ..     wP = wHc * cP
%                 .. we get the point coordinates (wP) in world coord.sys.
%                 .. Also refered to as transformation from camera to world
%

function gHc = handEye(bHg, wHc)

M = size(bHg,3);

K = (M*M-M)/2;               % Number of unique camera position pairs
A = zeros(3*K,3);            % will store: skew(Pgij+Pcij)
B = zeros(3*K,1);            % will store: Pcij - Pgij
k = 0;

% Now convert from wHc notation to Hc notation used in Tsai paper.
Hg = bHg;
% Hc = cHw = inv(wHc); We do it in a loop because wHc is given, not cHw
Hc = zeros(4,4,M); for i = 1:M, Hc(:,:,i) = inv(wHc(:,:,i)); end;

for i = 1:M,
   for j = i+1:M;
		Hgij = inv(Hg(:,:,j))*Hg(:,:,i);    % Transformation from i-th to j-th gripper pose
		Pgij = 2*rot2quat(Hgij);            % ... and the corresponding quaternion
      
		Hcij = Hc(:,:,j)*inv(Hc(:,:,i));    % Transformation from i-th to j-th camera pose
		Pcij = 2*rot2quat(Hcij);            % ... and the corresponding quaternion

      k = k+1;                            % Form linear system of equations
      A((3*k-3)+(1:3), 1:3) = skew(Pgij+Pcij); % left-hand side
      B((3*k-3)+(1:3))      = Pcij - Pgij;     % right-hand side
      
   end;
end;

% Rotation from camera to gripper is obtained from the set of equations:
%    skew(Pgij+Pcij) * Pcg_ = Pcij - Pgij
% Gripper with camera is first moved to M different poses, then the gripper
% .. and camera poses are obtained for all poses. The above equation uses
% .. invariances present between each pair of i-th and j-th pose.

Pcg_ = A \ B;                % Solve the equation A*Pcg_ = B

% Obtained non-unit quaternin is scaled back to unit value that
% .. designates camera-gripper rotation
Pcg = 2 * Pcg_ / sqrt(1 + Pcg_'*Pcg_);

Rcg = quat2rot(Pcg/2);         % Rotation matrix


% Calculate translational component
k = 0;
for i = 1:M,
   for j = i+1:M;
		Hgij = inv(Hg(:,:,j))*Hg(:,:,i);    % Transformation from i-th to j-th gripper pose
		Hcij = Hc(:,:,j)*inv(Hc(:,:,i));    % Transformation from i-th to j-th camera pose

      k = k+1;                            % Form linear system of equations
      A((3*k-3)+(1:3), 1:3) = Hgij(1:3,1:3)-eye(3); % left-hand side
      B((3*k-3)+(1:3))      = Rcg(1:3,1:3)*Hcij(1:3,4) - Hgij(1:3,4);     % right-hand side
      
   end;
end;

Tcg = A \ B;

gHc = transl(Tcg) * Rcg;	% incorporate translation with rotation


return

如果有错误的地方,还请各回指出,当第一时间改正~

作者介绍:

我是小智,机器人领域资深玩家,现深圳某独脚兽机器人算法工程师一枚

初中学习编程,高中开始学习机器人,大学期间打机器人相关比赛实现月入2W+(比赛奖金)

目前在输出机器人学习指南、论文注解、工作经验,欢迎大家关注小智,一起交流技术,学习机器人

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/143836.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
如何在本地部署 DeepSeek R1 模型?
在这个科技日新月异的时代,人工智能早已不再是遥不可及的未来幻想,而是悄然融入了我们的日常生活。
JanYork_简昀
2025/05/20
2730
如何在本地部署 DeepSeek R1 模型?
三步体验在线构建不同参数的DeepSeek模型
通过 cnb.cool 一键启动 DeepSeek:只需fork相关仓库,选择模型对应分支(1.5b/7b/8b/14b/32b/70b),进入「云原生开发」,输入简单命令即可与DeepSeek互动。
穿过生命散发芬芳
2025/03/10
1760
小白也能看懂的DeepSeek-R1本地部署指南
春节期间 Deepseek 凭借其出色的性能表现,吸引了众多技术爱好者的目光,会用的人说巨好用,但是也有很多人说也不过如此,其实这么多国际巨头都震惊,自然是非常惊艳的一款产品。如果你也渴望在本地部署该模型,深入探索其强大功能,那么这篇攻略将为你提供详细的指导。这里面我将给大家演示的是 windows 和 mac 双平台的部署。废话不多说,现在开始和大家一起部署。
徐建国
2025/02/06
53.4K5
小白也能看懂的DeepSeek-R1本地部署指南
在本地电脑部署自己的 DeepSeek 大模型 AI:小白也能轻松上手
最近 DeepSeek 大模型 AI 火遍全网,我也忍不住去了解了一番。尝试在本地部署后,发现整个过程非常简单,于是决定记录下来,分享给大家。本文将以最基础的方式演示如何部署,无需使用 Docker 容器,也不需要“魔法上网”,即使是计算机小白也能按照步骤轻松完成。
后端码匠
2025/02/06
3.2K0
教你 1 小时搭建属于自己的 AI 知识库,Ollama + MaxKB 超详细教程略
我们经常为海量文档找不到关键内容而烦恼,那么可以使用AI 帮忙轻松检索个人笔记,并且还能优化我们的文章,以我们的风格生成文章。今天,我来教你用 Ollama 和 MaxKB 搭建一个属于自己的 AI 知识库,让你的知识随时为你服务. Ollama 作为轻量级模型管理平台,可以快速安装、运行多种 AI 模型,如 DeepSeek-R1、Llama3 等。本文将手把手教你如何:
神的孩子都在歌唱
2025/03/29
8560
教你 1 小时搭建属于自己的 AI 知识库,Ollama + MaxKB 超详细教程略
小白也能看懂的DeepSeek-R1本地部署指南
春节期间,Deepseek以其卓越性能赢得众多技术爱好者的关注。用户评价褒贬不一,但国际巨头的震惊足以证明其非凡之处。若你想在本地部署该模型,探索其强大功能,以下指南将为你提供详细指导。本文将介绍Windows和Mac双平台的部署流程。
全栈若城
2025/02/08
58.5K2
小白也能看懂的DeepSeek-R1本地部署指南
纯 CPU 硬刚 DeepSeek-R1 671b,10 秒远程体验
最近有篇文章很火!腾讯玄武实验室居然整出了个纯 CPU 硬刚 DeepSeek R1 的方案,只需不到 4 万块钱的硬件就能搞定 DeepSeek-R1-671B-Q8!
志航
2025/04/24
3240
纯 CPU 硬刚 DeepSeek-R1 671b,10 秒远程体验
使用Ollama部署deepseek大模型
我的显卡在Windows电脑上面 所以使用Windows的安装方式去安装 若你的显卡是在Linux上面 可以使用如下命令安装
小陈运维
2025/02/04
2.2K0
使用Ollama部署deepseek大模型
DeepSeek喂饭级教程:腾讯云HAI一键部署
你好,我是喵喵侠。最近火热的国产大模型DeepSeek简直不要太火爆,想必你一定听说过。目前有大规模网络攻击,致使官方网站服务经常抽风不可用。这里我给你带来的是私有化部署方案,采用腾讯云HAI平台,可以一键部署,轻松获取这款强力的大模型!接下来我手把手教你如何操作,简单几分钟就能轻易上手!
喵喵侠
2025/02/06
8175
DeepSeek喂饭级教程:腾讯云HAI一键部署
彻底疯狂!腾讯云 AI 代码助手支持 DeepSeek R1 接入 !好用免费!
只需几步简单配置,就能搭建一个基于 DeepSeek,集「智能问答+实时搜索+ 补全代码」于一体的 AI 超级应用,你摸鱼,让 AI 给你免费打工!🤣
腾讯云代码助手 CodeBuddy
2025/02/10
4.1K3
一键部署,3分钟调用!DeepSeek-R1登陆腾讯云
DeepSeek-R1大模型一键部署至腾讯云「HAI」上,开发者仅需3分钟就能接入调用。
腾讯云开发者
2025/02/03
9330
一键部署,3分钟调用!DeepSeek-R1登陆腾讯云
DeepSeek-R1 高性能应用服务 HAI 开箱即用
一、环境说明 HAI已提供DeepSeek-R1 1.5B及7B模型预装环境(DeepSeek-R1-Distill-Qwen-1.5B、DeepSeek-R
geru
2025/01/31
12.5K5
DeepSeek上云 | 腾讯云HAI如何部署使用DeepSeek
对于本地PC部署DeepSeek,可能会受到电脑的内存、CPU、显卡的限制,如果想要扩容的话,只能更换硬件,这样的话成本简直高得离谱。而腾讯云高性能应用服务HAI恰恰解决了这个问题。HAI提供了不同的算力套餐,用户可以根据自己的需求购买,并且可以通过HAI预置的多种 AI 环境帮助用户快速部署。
叫我阿柒啊
2025/02/07
1.2K0
DeepSeek上云 | 腾讯云HAI如何部署使用DeepSeek
最全本地部署 DeepSeek R1 教程(适用于 Mac、Windows、Linux)
欢迎大家在评论区留言评论自己想了解的工具、方向或职业等互联网相关内容,点赞和推荐多的,波哥会优先安排解答!
IT运维技术圈
2025/02/05
39.3K4
最全本地部署 DeepSeek R1 教程(适用于 Mac、Windows、Linux)
腾讯云X DeepSeek:3行代码接入微信小程序、10秒让它开口说话
腾讯云开发上新,最少仅需3行代码,开发者就能将「满血」DeepSeek接入微信小程序里,实现智能对话、文本生成等多种功能;云开发新用户还享有首月套餐免费和100万token的「福利」。
小腾资讯君
2025/02/12
1.3K0
如何利用腾讯云轻量服务器搭建本地端DeepSeek
近期比较火的大模型DeepSeek AI很多兄弟们想自己本地配置却因为害怕电脑配置不够而没有去配置。
小胡同学
2025/02/05
7500
无需云端服务器: 三步实现DeepSeek大模型本地化部署deepseek、Ollama和Chatbox
还在为云端AI服务的高昂费用而苦恼?是否总担心数据隐私会在云端泄露?别愁啦!DeepSeek R1——这款与OpenAI o1性能相媲美的开源大模型,结合Ollama和Chatbox工具,就能让你轻松在本地实现大模型的部署,零成本、高隐私,畅享AI应用的无限可能!🤗
猫头虎
2025/02/02
1.9K0
无需云端服务器: 三步实现DeepSeek大模型本地化部署deepseek、Ollama和Chatbox
保姆级教程:0成本零基础带你部署DeepSeek-R1模型
😀 最近,一家名叫 DeepSeek 的初创公司经过技术迭代与升级,发布了全新一代大模型,“DeepSeek-V3”。由于这款大模型太过好用,DeepSeek R1 更是直接免费开源,在AI发烧友圈子传播后,传到了海外社交平台、技术论坛,引发了海外网友的连连称赞。
CloudStudio
2025/02/12
3690
保姆级教程:0成本零基础带你部署DeepSeek-R1模型
使用Ollama部署deepseek大模型
连接到另一台服务器上的Ollama时,请将OLLAMA_BASE_URL更改为服务器的URL:
小陈运维
2025/01/26
2.9K0
【人工智能】学会这几个命令,你也能快速完成DeepSeek R1的本地部署!!!
相信大家现在对DeepSeek这个国产AI已经并不陌生了,并且大部分的朋友已经开始用上了DeepSeek。
蒙奇D索隆
2025/02/10
1410
【人工智能】学会这几个命令,你也能快速完成DeepSeek R1的本地部署!!!
推荐阅读
相关推荐
如何在本地部署 DeepSeek R1 模型?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档