下载链接:

Unity3D 最新版Kinect v2 Examples with MS-SDK 2.21 体感识别

https://item.taobao.com/item.htm?spm=a21dvs.23580594.0.0.6781645eHgkE2H&ft=t&id=693349554570

https://item.taobao.com/item.htm?spm=a230r.1.14.28.56ab4073MaY0XB&id=687445969578

Azure Kinect Examples for Unity1.17.3包更新 体感识别示例插件

https://item.taobao.com/item.htm?spm=a21dvs.23580594.0.0.6781645eHgkE2H&ft=t&id=692155441731

抽了一上午去将所有的kinect的各种手势写完了,以后需要哪个就用哪个手势,不需要某个手势直接注释掉或者可以在识别到的手势不写方法就行了

kinect常用手势:

以下手势能被流畅的识别:

◎RaiseRightHand / RaiseLeftHand – 左手或右手举起过肩并保持至少一秒

◎Psi –双手举起过肩并保持至少一秒

◎Stop – 双手下垂.

◎Wave –左手或右手举起来回摆动

◎SwipeLeft – 右手向左挥.

◎SwipeRight – 左手向右挥.

◎SwipeUp / SwipeDown – 左手或者右手向上/下挥

◎ Click – 左手或右手在适当的位置停留至少2.5秒.

◎RightHandCursor / LeftHandCursor – 假手势,用来使光标随着手移动

◎ZoomOut – 手肘向下,左右手掌合在一起(求佛的手势),然后慢慢分开.

◎ZoomIn – 手肘向下,两手掌相聚至少0.7米,然后慢慢合在一起

◎Wheel –英文原版描述不清,就是ZoomOut/In的手势,只不过在动的时候是前后而非左右。

◎Jump –在1.5秒内髋关节中心至少上升10厘米

◎Squat -在1.5秒内髋关节中心至少下降10厘米

◎Push – 在1.5秒内将左手或右手向外推

◎Pull -在1.5秒内将左手或右手向里拉

当然还有不常用手势:

下面开始介绍怎么用unity + kinect:

1.Kinect for Windows开发套件,这个东西到处有,自己找吧,哈哈

2.下载kinect v2 sdk 链接:https://pan.baidu.com/s/19XbE7CLA64c1K6jrK9wf9g 密码:e4uw  下载完导入unity

3.创建一个空物体,取名KinectManager,在其上面加入两个脚本组件(插件自带),

4.创建一个空物体,取名GestureListener,添加脚本组件MyGestureListener,脚本内容附在下面,都加了注释,有不需要的手势直接注释掉就好了

5.随便创建一个物体,挂上脚本组件HeloCtr(这个自己随便取名无所谓)用来测试,

6.别忘了建两个text去实时的看动作识别没有,额,这个很重要,官方案例用的是GUIText,自己用的时候GUIText老有毛病,就我这暴脾气,直接用UGUI多好

效果图:(因为要截图,哈哈,动画有点变形了,这个是双手放大缩小的效果,右手伸过来截图的时候也被识别了,挺准确的)

MyGestureListener.cs:

using UnityEngine;
using System;
using UnityEngine.UI;

public class MyGestureListener : MonoBehaviour, KinectGestures.GestureListenerInterface
{
    [Tooltip("GUI-Text to display gesture-listener messages and gesture information.")]
    public Text gestureInfo;
    [Tooltip("Index of the player, tracked by this component. 0 means the 1st player, 1 - the 2nd one, 2 - the 3rd one, etc.")]
    public int playerIndex = 0;
    public static MyGestureListener Instance;
    private void Awake()
    {
        Instance = this;
    }
    // private bool to track if progress message has been displayed
    private bool progressDisplayed;
    private float progressGestureTime;

// whether the needed gesture has been detected or not

/// <summary>
    /// 右手举起过肩并保持至少一秒
    /// </summary>
    private bool RaiseRightHand;
    /// <summary>
    /// 左手举起过肩并保持至少一秒
    /// </summary>
    private bool RaiseLeftHand;
    /// <summary>
    /// 双手举起过肩并保持至少一秒
    /// </summary>
    private bool Psi;
    /// <summary>
    ///  双手下垂
    /// </summary>
    private bool Stop;
    /// <summary>
    /// 左手或右手举起来回摆动
    /// </summary>
    private bool Wave;
    /// <summary>
    /// 左手或右手在适当的位置停留至少2.5秒
    /// </summary>
    private bool Click;
    /// <summary>
    /// 假手势,用来使光标随着手移动
    /// </summary>
    private bool RightHandCursor;
    /// <summary>
    /// 假手势,用来使光标随着手移动
    /// </summary>
    private bool LeftHandCursor;
    /// <summary>
    ///手肘向下,左右手掌合在一起(求佛的手势),然后慢慢分开.
    /// </summary>
    private bool ZoomOut;
    /// <summary>
    /// 手肘向下,两手掌相聚至少0.7米,然后慢慢合在一起
    /// </summary>
    private bool ZoomIn;
    private float zoomFactor = 1f;
    /// <summary>
    /// 英文原版描述不清,就是ZoomOut/In的手势,只不过在动的时候是前后而非左右
    /// </summary>
    private bool Wheel;
    /// <summary>
    ///  在1.5秒内髋关节中心至少下降10厘米
    /// </summary>
    private bool Squat;
    /// <summary>
    ///  在1.5秒内将左手或右手向外推
    /// </summary>
    private bool Push;
    /// <summary>
    /// 在1.5秒内将左手或右手向里拉
    /// </summary>
    private bool Pull;
    /// <summary>
    /// 右手向左挥
    /// </summary>
    private bool SwipeLeft;
    /// <summary>
    ///  左手向右挥.
    /// </summary>
    private bool SwipeRight;
    /// <summary>
    ///  左手或者右手向上挥
    /// </summary>
    private bool SwipeUp;
    /// <summary>
    ///  左手或者右手向下挥
    /// </summary>
    private bool SwipeDown;
    /// <summary>
    /// 在1.5秒内髋关节中心至少上升10厘米
    /// </summary>
    private bool Jump;
    /// <summary>
    /// T字体位
    /// </summary>
    private bool Tpose;

/// <summary>
    /// Determines whether swipe left is detected.
    /// </summary>
    /// <returns><c>true</c> if swipe left is detected; otherwise, <c>false</c>.</returns>
    public bool IsRaiseRightHand()
    {
        if (RaiseRightHand)
        {
            RaiseRightHand = false;
            return true;
        }

return false;
    }
    public bool IsRaiseLeftHand()
    {
        if (RaiseLeftHand)
        {
            RaiseLeftHand = false;
            return true;
        }

return false;
    }
    public bool IsPsi()
    {
        if (Psi)
        {
            Psi = false;
            return true;
        }

return false;
    }
    public bool IsStop()
    {
        if (Stop)
        {
            Stop = false;
            return true;
        }

return false;
    }
    public bool IsWave()
    {
        if (Wave)
        {
            Wave = false;
            return true;
        }

return false;
    }
    public bool IsSwipeLeft()
    {
        if (SwipeLeft)
        {
            SwipeLeft = false;
            return true;
        }

return false;
    }
    public bool IsJump()
    {
        if (Jump)
        {
            Jump = false;
            return true;
        }

return false;
    }
    public bool IsSwipeRight()
    {
        if (SwipeRight)
        {
            SwipeRight = false;
            return true;
        }

return false;
    }
    public bool IsSwipeUp()
    {
        if (SwipeUp)
        {
            SwipeUp = false;
            return true;
        }

return false;
    }
    public bool IsSwipeDown()
    {
        if (SwipeDown)
        {
            SwipeDown = false;
            return true;
        }

return false;
    }
    public bool IsZoomOut()
    {
        if (ZoomOut)
        {
            return ZoomOut;
        }

return false;
    }
    public bool IsZoomIn()
    {
        return ZoomIn;

}
    /// <summary>
/// Gets the zoom factor.
/// </summary>
/// <returns>The zoom factor.</returns>
public float GetZoomFactor()
    {
        return zoomFactor;
    }
    public bool IsWheel()
    {
        if (Wheel)
        {
            Wheel = false;
            return true;
        }

return false;
    }
    public bool IsSquat()
    {
        if (Squat)
        {
            Squat = false;
            return true;
        }

return false;
    }
    public bool IsPush()
    {
        if (Push)
        {
            Push = false;
            return true;
        }

return false;
    }
    public bool IsPull()
    {
        if (Pull)
        {
            Pull = false;
            return true;
        }

return false;
    }
    public bool IsTpose()
    {
        if (Tpose)
        {
            Tpose = false;
            return true;
        }

return false;
    }
    /*
    * 当识别到用户时调用该函数
    */
    public void UserDetected(long userId, int userIndex)
    {
        // as an example - detect these user specific gestures
        KinectManager manager = KinectManager.Instance;
        manager.DetectGesture(userId, KinectGestures.Gestures.RaiseRightHand);
        manager.DetectGesture(userId, KinectGestures.Gestures.RaiseLeftHand);
        manager.DetectGesture(userId, KinectGestures.Gestures.Psi);
        manager.DetectGesture(userId, KinectGestures.Gestures.Stop);
        manager.DetectGesture(userId, KinectGestures.Gestures.Wave);
        manager.DetectGesture(userId, KinectGestures.Gestures.RaiseRightHand);
        manager.DetectGesture(userId, KinectGestures.Gestures.SwipeLeft);
        manager.DetectGesture(userId, KinectGestures.Gestures.SwipeRight);
        manager.DetectGesture(userId, KinectGestures.Gestures.SwipeUp);
        manager.DetectGesture(userId, KinectGestures.Gestures.SwipeDown);
      // gestures 枚举里 Click默认为 注释
      //  manager.DetectGesture(userId, KinectGestures.Gestures.Click);
        manager.DetectGesture(userId, KinectGestures.Gestures.ZoomOut);
        manager.DetectGesture(userId, KinectGestures.Gestures.ZoomIn);
        manager.DetectGesture(userId, KinectGestures.Gestures.Wheel);
        manager.DetectGesture(userId, KinectGestures.Gestures.Jump);
        manager.DetectGesture(userId, KinectGestures.Gestures.Squat);
        manager.DetectGesture(userId, KinectGestures.Gestures.Push);
        manager.DetectGesture(userId, KinectGestures.Gestures.Pull);
        manager.DetectGesture(userId, KinectGestures.Gestures.Tpose);

if (gestureInfo != null)
        {
            gestureInfo.GetComponent<Text>().text = "请开始你的表演";
        }
        Debug.Log("发现用户");
    }

/*
    * 当失去用户时出发
    */
    public void UserLost(long userId, int userIndex)
    {
        if (gestureInfo != null)
        {
            gestureInfo.GetComponent<Text>().text = string.Empty;
        }
        Debug.Log("失去用户");
    }

/// <summary>
    /// Invoked when a gesture is in progress.
    /// </summary>
    /// <param name="userId">被识别者的id</param>
    /// <param name="userIndex">被识别者的序号</param>
    /// <param name="gesture">手势类型</param>
    /// <param name="progress">手势识别的进度,可以认为是相似度。范围是[0,1]</param>
    /// <param name="joint">关节类型</param>
    /// <param name="screenPos">视图坐标的单位向量</param>
    public void GestureInProgress(long userId, int userIndex, KinectGestures.Gestures gesture,
                                  float progress, KinectInterop.JointType joint, Vector3 screenPos)
    {
        /*
         * 主要将一些需要动态监测的手势放在这个函数下
         * 比如说缩放、滚轮都是依据你两手之间的距离来判断应该缩放或旋转多少度
         */

//监测缩放,如果相似度大于50%
        // the gestures are allowed for the primary user only
        if (userIndex != playerIndex)
            return;

if (gesture == KinectGestures.Gestures.ZoomOut)
        {
            if (progress > 0.5f)
            {
                ZoomOut = true;
                zoomFactor = screenPos.z;

if (gestureInfo != null)
                {
                    string sGestureText = string.Format("{0} factor: {1:F0}%", gesture, screenPos.z * 100f);
                    gestureInfo.text = sGestureText;

progressDisplayed = true;
                    progressGestureTime = Time.realtimeSinceStartup;
                }
            }
            else
            {
                ZoomOut = false;
            }
        }
        else if (gesture == KinectGestures.Gestures.ZoomIn)
        {
            if (progress > 0.5f)
            {
                ZoomIn = true;
                zoomFactor = screenPos.z;

if (gestureInfo != null)
                {
                    string sGestureText = string.Format("{0} factor: {1:F0}%", gesture, screenPos.z * 100f);
                    gestureInfo.text = sGestureText;

progressDisplayed = true;
                    progressGestureTime = Time.realtimeSinceStartup;
                }
            }
            else
            {
                ZoomIn = false;
            }
        }
        else if ((gesture == KinectGestures.Gestures.Wheel || gesture == KinectGestures.Gestures.LeanLeft ||
                 gesture == KinectGestures.Gestures.LeanRight) && progress > 0.5f)
        {
            if (gestureInfo != null)
            {
                string sGestureText = string.Format("{0} - {1:F0} degrees", gesture, screenPos.z);
                gestureInfo.GetComponent<Text>().text = sGestureText;

progressDisplayed = true;
                progressGestureTime = Time.realtimeSinceStartup;
            }
        }
        else if (gesture == KinectGestures.Gestures.Run && progress > 0.5f)
        {
            if (gestureInfo != null)
            {
                string sGestureText = string.Format("{0} - progress: {1:F0}%", gesture, progress * 100);
                gestureInfo.GetComponent<Text>().text = sGestureText;

progressDisplayed = true;
                progressGestureTime = Time.realtimeSinceStartup;
            }
        }
    }

/// <summary>
    /// 当一个手势识别完成后被调用
    /// </summary>
    /// <returns>true</returns>
    /// <c>false</c>
    /// <param name="userId">被识别者的ID</param>
    /// <param name="userIndex">被识别者的序号</param>
    /// <param name="gesture">被识别到的手势类型</param>
    /// <param name="joint">被识别到的关节类型</param>
    /// <param name="screenPos">视图坐标的单位向量</param>
    public bool GestureCompleted(long userId, int userIndex, KinectGestures.Gestures gesture,
                                  KinectInterop.JointType joint, Vector3 screenPos)
    {
        if (progressDisplayed)
            return true;

string sGestureText = gesture + " detected";
        if (gestureInfo != null)
        {
            gestureInfo.GetComponent<Text>().text = sGestureText;
        }
        // 可以在这里写识别到的所有手势,完成之后去调用某个方法,
        //但为了右面可能不止一个场景可能使用到相同的手势,所以使用bool跳出去,在使用到的时候去写完成动作之后的方法
        switch (gesture)
        {
            case KinectGestures.Gestures.None:
                break;
              
            case KinectGestures.Gestures.RaiseRightHand:
                RaiseRightHand = true;
                break;
            case KinectGestures.Gestures.RaiseLeftHand:
                RaiseLeftHand = true;
                break;
            case KinectGestures.Gestures.Psi:
                Psi = true;
                break;
                // Tpose 不知道是什么鬼
            case KinectGestures.Gestures.Tpose:
                Tpose = true;
                break;
            case KinectGestures.Gestures.Stop:
                Stop = true;
                break;
            case KinectGestures.Gestures.Wave:
                Wave = true;
                break;
            case KinectGestures.Gestures.SwipeLeft:
                SwipeLeft = true;
                break;
            case KinectGestures.Gestures.SwipeRight:
                SwipeRight = true;
                break;
            case KinectGestures.Gestures.SwipeUp:
             //   gestureInfo.GetComponent<Text>().text = "上傻逼啊你";
                SwipeUp = true;
                break;
            case KinectGestures.Gestures.SwipeDown:
               // gestureInfo.GetComponent<Text>().text = "下傻逼啊你";
                SwipeDown = true;
                break;
            case KinectGestures.Gestures.ZoomIn:
                ZoomIn = true;
                break;
            case KinectGestures.Gestures.ZoomOut:
                ZoomOut = true;
                break;
            case KinectGestures.Gestures.Wheel:
                Wheel = true;
                break;
            case KinectGestures.Gestures.Jump:
               // gestureInfo.GetComponent<Text>().text = "你倒是跳啊啊你";
                Jump = true;
                break;
            case KinectGestures.Gestures.Squat:
                Squat = true;
                break;
            case KinectGestures.Gestures.Push:
                Push = true;
                break;
            case KinectGestures.Gestures.Pull:
                Pull = true;
                break;
            case KinectGestures.Gestures.ShoulderLeftFront:
                break;
            case KinectGestures.Gestures.ShoulderRightFront:
                break;
            case KinectGestures.Gestures.LeanLeft:
                break;
            case KinectGestures.Gestures.LeanRight:
                break;
            case KinectGestures.Gestures.LeanForward:
                break;
            case KinectGestures.Gestures.LeanBack:
                break;
            case KinectGestures.Gestures.KickLeft:
                break;
            case KinectGestures.Gestures.KickRight:
                break;
            case KinectGestures.Gestures.Run:
                break;
            case KinectGestures.Gestures.RaisedRightHorizontalLeftHand:
                break;
            case KinectGestures.Gestures.RaisedLeftHorizontalRightHand:
                break;
            case KinectGestures.Gestures.UserGesture1:
                break;
            case KinectGestures.Gestures.UserGesture2:
                break;
            case KinectGestures.Gestures.UserGesture3:
                break;
            case KinectGestures.Gestures.UserGesture4:
                break;
            case KinectGestures.Gestures.UserGesture5:
                break;
            case KinectGestures.Gestures.UserGesture6:
                break;
            case KinectGestures.Gestures.UserGesture7:
                break;
            case KinectGestures.Gestures.UserGesture8:
                break;
            case KinectGestures.Gestures.UserGesture9:
                break;
            case KinectGestures.Gestures.UserGesture10:
                break;
            default:
                break;
        }
        
        return true;
    }

//参数同上,在手势被取消的时候调用
    public bool GestureCancelled(long userId, int userIndex, KinectGestures.Gestures gesture,
                                  KinectInterop.JointType joint)
    {
        if (progressDisplayed)
        {
            progressDisplayed = false;

if (gestureInfo != null)
            {
                gestureInfo.GetComponent<Text>().text = String.Empty;
            }
        }

return true;
    }

public void Update()
    {
        if (progressDisplayed && ((Time.realtimeSinceStartup - progressGestureTime) > 2f))
        {
            progressDisplayed = false;

if (gestureInfo != null)
            {
                gestureInfo.GetComponent<Text>().text = String.Empty;
            }

Debug.Log("Forced progress to end.");
        }
    }

}

HeloCtr.cs:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class HeloCtr : MonoBehaviour {
    private MyGestureListener gestureListener;
    [Tooltip("Speed of spinning, when presentation slides change.")]
    public float spinSpeed = 10;
    public Text text;
// Use this for initialization
void Start () {
        gestureListener = MyGestureListener.Instance;
        print(gestureListener);
}

// Update is called once per frame
void Update () {
        if (!gestureListener)
        {
            print("没有进来 你他妈真的烦");
            return;

}
        print("你他吗的竟然真的进来了");
        if (gestureListener.IsRaiseRightHand())
        {
            text.GetComponent<Text>().text = "右手举起过肩并保持至少一秒";
        }
        if (gestureListener.IsRaiseLeftHand())
        {
            text.GetComponent<Text>().text = "左手举起过肩并保持至少一秒";
        }
        if (gestureListener.IsPsi())
        {
            text.GetComponent<Text>().text = "双手举起过肩并保持至少一秒";
        }

if (gestureListener.IsStop())
        {
            text.GetComponent<Text>().text = "双手下垂.";
        }
        if (gestureListener.IsWave())
        {
            text.GetComponent<Text>().text = "左手或右手举起来回摆动";
        }
        if (gestureListener.IsSwipeLeft())
        {
            text.GetComponent<Text>().text = "向左挥动";
            print("zuo");
        }

if (gestureListener.IsSwipeRight())
        {
            text.GetComponent<Text>().text = "向右挥动";
            print("you");
        }
        if (gestureListener.IsSwipeUp())
        {
            text.GetComponent<Text>().text = "向上挥动";
            print("shang");

}
        if (gestureListener.IsSwipeDown())
        {
            text.GetComponent<Text>().text = "向下挥动";
            print("xia");
        }

if (gestureListener.IsZoomIn() || gestureListener.IsZoomOut())
        {
            // zoom the model
            float zoomFactor = gestureListener.GetZoomFactor();

Vector3 newLocalScale = new Vector3(zoomFactor, zoomFactor, zoomFactor);
            transform.localScale = Vector3.Lerp(transform.localScale, newLocalScale, spinSpeed * Time.deltaTime);
        }
        //if (gestureListener.IsZoomOut())
        //{
        //    text.GetComponent<Text>().text = "手肘向下,左右手掌合在一起(求佛的手势),然后慢慢分开.";
        //}
        //if (gestureListener.IsZoomIn())
        //{
        //    text.GetComponent<Text>().text = "手肘向下,两手掌相聚至少0.7米,然后慢慢合在一起";
        //}
        if (gestureListener.IsWheel())
        {
            text.GetComponent<Text>().text = "英文原版描述不清,就是ZoomOut/In的手势,只不过在动的时候是前后而非左右";
        }
        if (gestureListener.IsJump())
        {
            text.GetComponent<Text>().text = "跳动";
            print("tiao");
        }
        if (gestureListener.IsSquat())
        {
            text.GetComponent<Text>().text = "在1.5秒内髋关节中心至少下降10厘米";
        }
        if (gestureListener.IsPush())
        {
            text.GetComponent<Text>().text = "在1.5秒内将左手或右手向外推";
        }
        if (gestureListener.IsPull())
        {
            text.GetComponent<Text>().text = "在1.5秒内将左手或右手向里拉";
        }
        if (gestureListener.IsTpose())
        {
            text.GetComponent<Text>().text = "T位站着";
        }

}
}

Unity + Kinect基本上所有的手势二次封装(一)相关推荐

  1. Kinect体感机器人(二)—— 体感识别

    Kinect体感机器人(二)-- 体感识别 By 马冬亮(凝霜  Loki) 一个人的战争(http://blog.csdn.net/MDL13412) 背景知识 体感技术属于NUI(自然人机界面)的 ...

  2. Unity超基础学习笔记(二)

    Unity超基础学习笔记(二) 1. 基本数据类型的扩展 之前在K12中学习了一些基本的数据类型,实际上C#支持更多的数据类型.如下: 注意无符号整型数和有符号整型数的表示范围,例如: int 能表示 ...

  3. Unity C# 网络学习(十二)——Protobuf生成协议

    Unity C# 网络学习(十二)--Protobuf生成协议 一.安装 去Protobuf官网下载对应操作系统的protoc,用于将.proto文件生成对应语言的协议语言文件 由于我使用的是C#所以 ...

  4. Unity动画系统学习笔记(二)根运动、动画事件与状态机行为

    一.根运动 在学习根运动前需要了解两个名词: 身体变换:身体变换是角色的质心.它用于 Mecanim 的重定向引擎,并提供最稳定的移位模型.身体方向是相对于 Avatar T 形姿势的下身和上身方向的 ...

  5. Unity编译器拓展学习总结(二):各个平台菜单栏拓展

    Unity编译器拓展学习总结(二):各个平台菜单栏拓展 前情参考:Unity编译器拓展学习总结(一):常用工具API 文章目录 Unity编译器拓展学习总结(二):各个平台菜单栏拓展 前言 菜单栏拓展 ...

  6. OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据...

    OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据 我们这片博文就来聊聊这个反响很不错的OkHttp了,标题是我恶搞的,本篇将着重详细的 ...

  7. Unity 进阶 之 实现简单的音频可视化封装(包括音频和麦克风)

    Unity 进阶 之 实现简单的音频可视化封装(包括音频和麦克 目录 Unity 进阶 之 实现简单的音频可视化封装(包括音频和麦克 一.简单介绍 二.实现原理 三.注意事项 四.效果预览 五.实现步 ...

  8. OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据

    OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据 我们这片博文就来聊聊这个反响很不错的OkHttp了,标题是我恶搞的,本篇将着重详细的 ...

  9. Android 二次封装网络加载框架

    Android 二次封装网络加载框架 写在最前面 开发当中,在请求网络的时候,大家或多或少都会使用一些第三方框架,Android-Async-Http. Volley.XUtils.Okhttp.Re ...

最新文章

  1. Installation error: INSTALL_FAILED_VERSION_DOWNGRADE
  2. OJ问题检测程序---python开发
  3. 动态加载laydate 失效_弹簧的失效分析与预防技术参考
  4. android 多用户管理UserManager
  5. 攻击 FreeIPA 域:对象枚举
  6. delphi添加类文件_SpringBoot攻略三、配置文件说明
  7. flink編譯hadoop3.1.2(失败,这个问题没有意义,关闭)
  8. AD制图相关问题总结
  9. chart.js雷达图不显示刻度标签_Matplotlib从入门再也不放弃
  10. 调整手机titlebar与app的titlebar相衔接
  11. 利用jmeter做一个简单的性能测试并进行参数化设置
  12. Fortan写出数据到CSV文件中
  13. 【拆机】小米路由器4
  14. Tomcat 内存溢出问题与解决方法
  15. android sd卡 f2fs,显著提速!谷歌Pixel 3/3 XL使用了三星F2FS文件系统
  16. Flash优秀学习资源下载总汇!(不断更新)
  17. TesterHome创始人思寒:如何从手工测试进阶自动化测试?十余年经验分享
  18. 免费开源的几款Web服务器软件简介
  19. 天嵌科技为E9卡片电脑Qt快速入门攻略
  20. 微软、谷歌、百度等公司经典面试100题

热门文章

  1. php realpath 缓存,PHP的Realpath Cache
  2. 如何从Vant Weapp、MinUI、iView Weapp、Wux Weapp、ColorUI共5个小程序组件库选型 转载
  3. 棱形打印--进阶2(Java)
  4. 字典(DICT)知识大全
  5. 线性代数-矩阵及其运算(总结)
  6. 在Java中操作MySQL(JDBC)
  7. 关于Chrome浏览器的一些使用技巧
  8. GATOR齿轮---凯利讯半导体
  9. DVWA11_Insecure CAPTCHA(不安全的验证码)
  10. ldap打通confluence