如何dataset中添加多组数据
string dbPath = @"D:\历年高考分数.db";
            string sq = @"Data Source=" + dbPath;
            m = new SQLiteConnection(sq);
            m.Open();
            SQLiteDataAdapter mAdapter = new SQLiteDataAdapter("select Volume1,Volume2 from 曲线", m);
            DataSet ds = new DataSet();
            mAdapter.Fill(ds);
            DataTable dt = ds.Tables[0];
                        if (Flag == 3)
            {
                DataRow MyRow = dt.NewRow();
                MyRow["Volume1"]= textBox1.Text;
                MyRow["Volume2"]= textBox2.Text;
                dt.Rows.Add(MyRow);
                SQLiteCommandBuilder mySqlCommandBuilder = new SQLiteCommandBuilder(mAdapter);
                mAdapter.Update(ds);
            }
            //设置图表的数据源
            Chart1.DataSource = dt;
                         private void button2_Click(object sender, EventArgs e)
        {
            Flag = 3;
        }

光添加一组数据没什么问题,如何添加多组不同的数据?

1个回答

dt.Rows.Add(MyRow);
这里就可以多行

要不同,就是你 textBox1、 textBox2换成不同的,比如用逗号分隔:
在textbox1里面输入1,2,3,4
textBox2里面输入4,5,6,7
下面程序把1,4 2,5 3,6 4,7这几对数字依次插入
for (int i = 0; i < textBox1.Split(',').Count(); i++)
{
DataRow MyRow = dt.NewRow();
MyRow["Volume1"]= textBox1.Text.Split(',')[i];
MyRow["Volume2"]= textBox2.Text.Split(',')[i];
dt.Rows.Add(MyRow);
}

qq_39815900
沫琉璃 这是没把.text写上去
3 个月之前 回复
weixin_44138934
wxy新人小白 for (int i = 0; i < textBox1.Split(',').Count(); i++)这里显示TextBox未包含Split定义
3 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
如何删除dataset中的某行数据和添加多组数据
``` string dbPath = @"D:\历年高考分数.db"; string sq = @"Data Source=" + dbPath; m = new SQLiteConnection(sq); m.Open(); SQLiteDataAdapter mAdapter = new SQLiteDataAdapter("select Volume1,Volume2 from 曲线", m); DataSet ds = new DataSet(); mAdapter.Fill(ds); DataTable dt = ds.Tables[0]; if (Flag == 4) { SQLiteCommandBuilder cmdb = new SQLiteCommandBuilder(mAdapter); ds.Tables[0].Rows[0].Delete(); //DataSet.AcceptChanges(); mAdapter.DeleteCommand = cmdb.GetDeleteCommand(); mAdapter.Update(ds); } if (Flag == 3) { DataRow MyRow = dt.NewRow(); MyRow["Volume1"]= textBox1.Text; MyRow["Volume2"]= textBox2.Text; dt.Rows.Add(MyRow); SQLiteCommandBuilder mySqlCommandBuilder = new SQLiteCommandBuilder(mAdapter); mAdapter.Update(ds); } //设置图表的数据源 Chart1.DataSource = dt; private void button2_Click(object sender, EventArgs e) { Flag = 3; } private void button3_Click(object sender, EventArgs e) { Flag = 4; } ``` 光添加一组数据没什么问题,如何添加多组数据? 还有就是删除某行数据,会提示对于不返回任何键列信息的 SelectCommand,不支持 DeleteCommand 的动态 SQL 生成。 如何处理
添加一组数据时,提示insert into 语法错误
//数据库连接 string connstr = "Provider=Microsoft.Jet.OleDb.4.0;"; connstr += @"Data Source=D:\Merger201503016caohuan\GEARCNC.mdb";//创建连接对象 OleDbConnection tempconn = new OleDbConnection(connstr); tempconn.Open(); string str="select * from WorkPieceData"; OleDbCommand acommand = new OleDbCommand(str , tempconn); OleDbDataAdapter WorkPieceDataDA = new OleDbDataAdapter(); DataSet ds = new DataSet(); WorkPieceDataDA.SelectCommand = acommand; WorkPieceDataDA.Fill(ds, "WorkPieceData"); tempconn.Close(); //新建一行 DataRow dr = ds.Tables["WorkPieceData"].NewRow(); //为各字段赋值 dr["齿数"] = ChiShu.Text; dr["法面模数"] = BiaoZhunMoShu.Text; ds.Tables["WorkPieceData"].Rows.Add(dr);//将新行添加到表中 OleDbCommandBuilder builder = new OleDbCommandBuilder(WorkPieceDataDA); tempconn.Open(); WorkPieceDataDA.Update(ds,"WorkPieceData"); tempconn.Close();
C#操作向Excel添加数据出现将之前数据覆盖了,怎么处理呢
请教下各位大师,我写的C#操作向Excel添加数据时,将之前数据覆盖了,怎么处理呢,谢谢! int OKYield; int NGYield; int.TryParse(TbxOKyield.Text, out OKYield); int.TryParse(TbxNGyield.Text, out NGYield); int AllYield = OKYield + NGYield; #region 创建保存Excel方法1 测试成功 // 文件保存路径及名称 string fileName = @"C:\Hooper_He\Yield.xlsx"; // 创建Excel文档 Microsoft.Office.Interop.Excel.Application ExcelApp = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel.Workbook ExcelDoc = ExcelApp.Workbooks.Add(Type.Missing); Microsoft.Office.Interop.Excel.Worksheet xlSheet = ExcelDoc.Worksheets.Add(Type.Missing,Type.Missing, Type.Missing, Type.Missing); ExcelApp.DisplayAlerts = false; #region 遍历Excel 计算总行数 int rowsnum = 0; try { string strPath = @"C:\Hooper_He\Yield.xlsx"; string fileType = System.IO.Path.GetExtension(strPath); string strCon = ""; if (fileType == ".xls") strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strPath + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'"; else strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strPath + ";Extended Properties='Excel 12.0;HDR=YES;IMEX=1'"; OleDbConnection Con = new OleDbConnection(strCon);//建立连接 string strSql = "select * from [Sheet4$]";//表名的写法也应注意不同,对应的excel表为sheet1,在这里要在其后加美元符号$,并用中括号 OleDbCommand Cmd = new OleDbCommand(strSql, Con);//建立要执行的命令 OleDbDataAdapter da = new OleDbDataAdapter(Cmd);//建立数据适配器 DataSet ds = new DataSet();//新建数据集 da.Fill(ds, "shyman");//把数据适配器中的数据读到数据集中的一个表中(此处表名为shyman,可以任取表名) DataRow[] dr = ds.Tables[0].Select(); //定义一个DataRow数组 rowsnum = ds.Tables[0].Rows.Count; } catch (Exception ex) { MessageBox.Show(ex.Message);//捕捉异常 } #endregion // 单元格下标是从[1,1]开始的 xlSheet.Cells[1, 1] = "Time"; xlSheet.Cells[1, 2] = "OK_Data"; xlSheet.Cells[1, 3] = "NG_Data"; xlSheet.Cells[1, 4] = "All_Data"; for (int i = rowsnum + 2; i < rowsnum + 3; i++) { xlSheet.Cells[i, 1] = DateTime.Now.Month.ToString() + "月" + DateTime.Now.Day.ToString(); xlSheet.Cells[i, 2] = OKYield.ToString(); xlSheet.Cells[i, 3] = NGYield.ToString(); xlSheet.Cells[i, 4] = AllYield.ToString(); } // 文件保存 xlSheet.SaveAs(fileName); ExcelDoc.Close(Type.Missing, fileName, Type.Missing); ExcelApp.Quit(); #endregion ``` ```
在C#中如何使窗体间传combobox当前选中的值,而不是初始化后的combobox的第一个数据
目的:点一个按钮,子窗口嵌在主窗口(panel)上,在主窗口选完combobox的值后,按查询按钮,子窗口根据combobox的值选择数据使chart出图,然后改变combobox的值,子窗口上chart所连接的数据发生改变,图发生改变 问题:不管我怎么选combobox的值,它都只传comboBox1.Text=CHR1,comboBox2.Text=1,comboBox3.Text=1009;都只连接同一组数。 我该怎么使窗体间传combobox当前选中的值 主窗口中部分程序 ``` public partial class Form1 : Form { Win1 w1; Win2 w2; Win3 w3; Win4 w4; Win5 w5; private bool flag1; private bool flag2; private bool flag; public string com1 { get { return comboBox1.Text; } } public string com2 { get { return comboBox2.Text; } } public string com3 { get { return comboBox3.Text; } } public Form1() { InitializeComponent(); string[] chexing = new[] { "CHR1", "CHR2", "CHR3" }; string[] tuoche = new[] { "1", "2", "3" }; string[] cgqxh = new[] { "1009", "1002", "1666" }; comboBox1.DataSource = chexing; comboBox1.Name = "comboBox1"; comboBox1.DropDownStyle = ComboBoxStyle.DropDownList; comboBox2.DataSource = tuoche; comboBox2.Name = "comboBox2"; comboBox2.DropDownStyle = ComboBoxStyle.DropDownList; comboBox3.DataSource = cgqxh; comboBox3.Name = "comboBox3"; comboBox3.DropDownStyle = ComboBoxStyle.DropDownList; comboBox3.Enabled = false; if (flag1 == true && flag2 == true)//按完combox1和combox2之后,才能选combox3 { comboBox3.Enabled = true; } } private void Form1_Load(object sender, EventArgs e) { w1 = new Win1(); w2 = new Win2(); w3 = new Win3(); w4 = new Win4(); w5 = new Win5(); } private void toolStripButton1_Click(object sender, EventArgs e) { this.panel1.Controls.Clear(); // 清空原有的控件 w1.TopLevel = false; // 非顶级窗口 w1.FormBorderStyle = FormBorderStyle.None; // 不显示标题栏 w1.WindowState = FormWindowState.Maximized; this.panel1.Controls.Add(w1); // 添加w1窗体 w1.Show(); flag = true; } private void comboBox1_SelectedValueChanged(object sender, EventArgs e) { flag1 = true; } private void comboBox2_SelectedValueChanged(object sender, EventArgs e) { flag2 = true; } private void button1_Click(object sender, EventArgs e) { if (flag == true && flag1 == true && flag2 == true) { w1.Creatchart1(); } } ``` 子窗口中部分程序 ``` public partial class Win1 : Form { private string a; private string b; private string c; private SQLiteConnection m; public Win1() { InitializeComponent(); } public void Creatchart1() { chart1.Series.Clear(); Form1 f1 = new Form1(); a = f1.com1.ToString(); b = f1.com2.ToString(); c = f1.com3.ToString(); string wax = a + b + c; string dbPath = @"D:\历年高考分数.db"; string sq = @"Data Source=" + dbPath; m = new SQLiteConnection(sq); m.Open(); SQLiteDataAdapter mAdapter = new SQLiteDataAdapter("select " + wax + ",yxlc from 表2", m); DataSet ds = new DataSet(); mAdapter.Fill(ds); DataTable dt = ds.Tables[0]; //设置图表的数据源 Series Series1 = new Series(); chart1.DataSource = dt; Series1.IsValueShownAsLabel = false;//是否显示图例 chart1.Series.Add(Series1); chart1.Series["Series1"].ChartType = SeriesChartType.Spline;//形状 chart1.Series[0].XValueMember = "yxlc";//X轴数据成员列 chart1.Series[0].YValueMembers = wax; chart1.Series[0].IsValueShownAsLabel = true;//显示坐标 chart1.ChartAreas[0].AxisX.Title = "运行里程(万公里)"; chart1.ChartAreas[0].AxisY.Title = "故障率(%)"; chart1.Series[0].MarkerStyle = MarkerStyle.Circle; 要提//需示的信息 chart1.Series[0].ToolTip = "运行里程:#VALX\\n故障率:#VALY"; //将文字移到外侧 chart1.Series[0]["PieLabelStyle"] = "Outside"; chart1.DataBind(); chart1.BringToFront(); m.Close(); } ``` ![图片说明](https://img-ask.csdn.net/upload/201909/05/1567679560_962915.png)
在C#中如何使窗体间传变化的值
目的:点一个按钮,子窗口嵌在主窗口(panel)上,在主窗口选完combobox的值后,按查询按钮,子窗口根据combobox的值选择数据使chart出图,然后改变combobox的值,子窗口上chart所连接的数据发生改变,图发生改变 问题:不管我怎么选combobox的值,它都只传comboBox1.Text=CHR1,comboBox2.Text=1,comboBox3.Text=1009;都只连接同一组数。 我该怎么使窗体间传变化的值 主窗口中部分程序 ``` public partial class Form1 : Form { Win1 w1; Win2 w2; Win3 w3; Win4 w4; Win5 w5; private bool flag1; private bool flag2; private bool flag; public string com1 { get { return comboBox1.Text; } } public string com2 { get { return comboBox2.Text; } } public string com3 { get { return comboBox3.Text; } } public Form1() { InitializeComponent(); string[] chexing = new[] { "CHR1", "CHR2", "CHR3" }; string[] tuoche = new[] { "1", "2", "3" }; string[] cgqxh = new[] { "1009", "1002", "1666" }; comboBox1.DataSource = chexing; comboBox1.Name = "comboBox1"; comboBox1.DropDownStyle = ComboBoxStyle.DropDownList; comboBox2.DataSource = tuoche; comboBox2.Name = "comboBox2"; comboBox2.DropDownStyle = ComboBoxStyle.DropDownList; comboBox3.DataSource = cgqxh; comboBox3.Name = "comboBox3"; comboBox3.DropDownStyle = ComboBoxStyle.DropDownList; comboBox3.Enabled = false; if (flag1 == true && flag2 == true)//按完combox1和combox2之后,才能选combox3 { comboBox3.Enabled = true; } } private void Form1_Load(object sender, EventArgs e) { w1 = new Win1(); w2 = new Win2(); w3 = new Win3(); w4 = new Win4(); w5 = new Win5(); } private void toolStripButton1_Click(object sender, EventArgs e) { this.panel1.Controls.Clear(); // 清空原有的控件 w1.TopLevel = false; // 非顶级窗口 w1.FormBorderStyle = FormBorderStyle.None; // 不显示标题栏 w1.WindowState = FormWindowState.Maximized; this.panel1.Controls.Add(w1); // 添加w1窗体 w1.Show(); flag = true; } ``` 子窗口中部分程序 ``` public partial class Win1 : Form { private string a; private string b; private string c; private SQLiteConnection m; public Win1() { InitializeComponent(); } public void Creatchart1() { chart1.Series.Clear(); Form1 f1 = new Form1(); a = f1.com1.ToString(); b = f1.com2.ToString(); c = f1.com3.ToString(); string wax = a + b + c; string dbPath = @"D:\历年高考分数.db"; string sq = @"Data Source=" + dbPath; m = new SQLiteConnection(sq); m.Open(); SQLiteDataAdapter mAdapter = new SQLiteDataAdapter("select " + wax + ",yxlc from 表2", m); DataSet ds = new DataSet(); mAdapter.Fill(ds); DataTable dt = ds.Tables[0]; //设置图表的数据源 Series Series1 = new Series(); chart1.DataSource = dt; Series1.IsValueShownAsLabel = false;//是否显示图例 chart1.Series.Add(Series1); chart1.Series["Series1"].ChartType = SeriesChartType.Spline;//形状 chart1.Series[0].XValueMember = "yxlc";//X轴数据成员列 chart1.Series[0].YValueMembers = wax; chart1.Series[0].IsValueShownAsLabel = true;//显示坐标 chart1.ChartAreas[0].AxisX.Title = "运行里程(万公里)"; chart1.ChartAreas[0].AxisY.Title = "故障率(%)"; chart1.Series[0].MarkerStyle = MarkerStyle.Circle; 要提//需示的信息 chart1.Series[0].ToolTip = "运行里程:#VALX\\n故障率:#VALY"; //将文字移到外侧 chart1.Series[0]["PieLabelStyle"] = "Outside"; chart1.DataBind(); chart1.BringToFront(); m.Close(); } ``` ![图片说明](https://img-ask.csdn.net/upload/201909/04/1567561655_153586.png)
想用树莓派做行人识别,不知道可以吗
先在树莓派上装c++版的opencv,用板子上的csi摄像头采集图像,然后用HOG特征和SVM来检测其中的行人。不知道树莓派算力够吗? 想把这个程序写进去。 ``` #include <iostream> #include <fstream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/objdetect/objdetect.hpp> #include <opencv2/ml/ml.hpp> using namespace std; using namespace cv; #define PosSamNO 1114 //正样本个数 #define NegSamNO 12180 //负样本个数 #define TRAIN true//是否进行训练,true表示重新训练,false表示读取xml文件中的SVM模型 #define CENTRAL_CROP false //true:训练时,对96*160的INRIA正样本图片剪裁出中间的64*128大小人体 //HardExample:负样本个数。如果HardExampleNO大于0,表示处理完初始负样本集后,继续处理HardExample负样本集。 //不使用HardExample时必须设置为0,因为特征向量矩阵和特征类别矩阵的维数初始化时用到这个值 #define HardExampleNO 433 //继承自CvSVM的类,因为生成setSVMDetector()中用到的检测子参数时,需要用到训练好的SVM的decision_func参数, //但通过查看CvSVM源码可知decision_func参数是protected类型变量,无法直接访问到,只能继承之后通过函数访问 class MySVM : public CvSVM { public: //获得SVM的决策函数中的alpha数组 double * get_alpha_vector() { return this->decision_func->alpha; } //获得SVM的决策函数中的rho参数,即偏移量 float get_rho() { return this->decision_func->rho; } }; int main() { //检测窗口(64,128),块尺寸(16,16),块步长(8,8),cell尺寸(8,8),直方图bin个数9 HOGDescriptor hog(Size(64,128),Size(16,16),Size(8,8),Size(8,8),9);//HOG检测器,用来计算HOG描述子的 int DescriptorDim;//HOG描述子的维数,由图片大小、检测窗口大小、块大小、细胞单元中直方图bin个数决定 MySVM svm;//SVM分类器 //若TRAIN为true,重新训练分类器 if(TRAIN) { string ImgName;//图片名(绝对路径) ifstream finPos("d:/hogmit/pos/pos.txt");//正样本图片的文件名列表 //ifstream finPos("PersonFromVOC2012List.txt");//正样本图片的文件名列表 ifstream finNeg("d:/hogmit/neg/neg.txt");//负样本图片的文件名列表 Mat sampleFeatureMat;//所有训练样本的特征向量组成的矩阵,行数等于所有样本的个数,列数等于HOG描述子维数 Mat sampleLabelMat;//训练样本的类别向量,行数等于所有样本的个数,列数等于1;1表示有人,-1表示无人 //依次读取正样本图片,生成HOG描述子 for(int num=0; num<PosSamNO && getline(finPos,ImgName); num++) { cout<<"处理:"<<ImgName<<endl; //ImgName = "D:\\DataSet\\PersonFromVOC2012\\" + ImgName;//加上正样本的路径名 ImgName = "d:/hogmit/pos/" + ImgName;//加上正样本的路径名 Mat src = imread(ImgName);//读取图片 if(CENTRAL_CROP) src = src(Rect(16,16,64,128));//将96*160的INRIA正样本图片剪裁为64*128,即剪去上下左右各16个像素 //resize(src,src,Size(64,128)); vector<float> descriptors;//HOG描述子向量 hog.compute(src,descriptors,Size(8,8));//计算HOG描述子,检测窗口移动步长(8,8) // cout<<"描述子维数:"<<descriptors.size()<<endl; //处理第一个样本时初始化特征向量矩阵和类别矩阵,因为只有知道了特征向量的维数才能初始化特征向量矩阵 if( 0 == num ) { DescriptorDim = descriptors.size();//HOG描述子的维数 //初始化所有训练样本的特征向量组成的矩阵,行数等于所有样本的个数,列数等于HOG描述子维数sampleFeatureMat sampleFeatureMat = Mat::zeros(PosSamNO+NegSamNO+HardExampleNO, DescriptorDim, CV_32FC1); //初始化训练样本的类别向量,行数等于所有样本的个数,列数等于1;1表示有人,0表示无人 sampleLabelMat = Mat::zeros(PosSamNO+NegSamNO+HardExampleNO, 1, CV_32FC1); } //将计算好的HOG描述子复制到样本特征矩阵sampleFeatureMat for(int i=0; i<DescriptorDim; i++) sampleFeatureMat.at<float>(num,i) = descriptors[i];//第num个样本的特征向量中的第i个元素 sampleLabelMat.at<float>(num,0) = 1;//正样本类别为1,有人 } //依次读取负样本图片,生成HOG描述子 for(int num=0; num<NegSamNO && getline(finNeg,ImgName); num++) { cout<<"处理:"<<ImgName<<endl; ImgName = "d:/hogmit/neg/" + ImgName;//加上负样本的路径名 Mat src = imread(ImgName);//读取图片 //resize(src,img,Size(64,128)); vector<float> descriptors;//HOG描述子向量 hog.compute(src,descriptors,Size(8,8));//计算HOG描述子,检测窗口移动步长(8,8) //cout<<"描述子维数:"<<descriptors.size()<<endl; //将计算好的HOG描述子复制到样本特征矩阵sampleFeatureMat for(int i=0; i<DescriptorDim; i++) sampleFeatureMat.at<float>(num+PosSamNO,i) = descriptors[i];//第PosSamNO+num个样本的特征向量中的第i个元素 sampleLabelMat.at<float>(num+PosSamNO,0) = -1;//负样本类别为-1,无人 } //处理HardExample负样本 if(HardExampleNO > 0) { ifstream finHardExample("d:/hogmit/hard/hard.txt");//HardExample负样本的文件名列表 //依次读取HardExample负样本图片,生成HOG描述子 for(int num=0; num<HardExampleNO && getline(finHardExample,ImgName); num++) { cout<<"处理:"<<ImgName<<endl; ImgName = "d:/hogmit/hard/" + ImgName;//加上HardExample负样本的路径名 Mat src = imread(ImgName);//读取图片 //resize(src,img,Size(64,128)); vector<float> descriptors;//HOG描述子向量 hog.compute(src,descriptors,Size(8,8));//计算HOG描述子,检测窗口移动步长(8,8) //cout<<"描述子维数:"<<descriptors.size()<<endl; //将计算好的HOG描述子复制到样本特征矩阵sampleFeatureMat for(int i=0; i<DescriptorDim; i++) sampleFeatureMat.at<float>(num+PosSamNO+NegSamNO,i) = descriptors[i];//第PosSamNO+num个样本的特征向量中的第i个元素 sampleLabelMat.at<float>(num+PosSamNO+NegSamNO,0) = -1;//负样本类别为-1,无人 } } //输出样本的HOG特征向量矩阵到文件 ofstream fout("d:/xlw/SampleFeatureMat.txt"); for(int i=0; i<PosSamNO+NegSamNO; i++) { fout<<i<<endl; for(int j=0; j<DescriptorDim; j++) { fout<<sampleFeatureMat.at<float>(i,j)<<" "; } fout<<endl; } //训练SVM分类器 //迭代终止条件,当迭代满1000次或误差小于FLT_EPSILON时停止迭代 CvTermCriteria criteria = cvTermCriteria(CV_TERMCRIT_ITER+CV_TERMCRIT_EPS, 1000, FLT_EPSILON); //SVM参数:SVM类型为C_SVC;线性核函数;松弛因子C=0.01 CvSVMParams param(CvSVM::C_SVC, CvSVM::LINEAR, 0, 1, 0, 0.01, 0, 0, 0, criteria); cout<<"开始训练SVM分类器"<<endl; double time0=static_cast<double>(getTickCount()); svm.train(sampleFeatureMat,sampleLabelMat, Mat(), Mat(), param);//训练分类器 time0=((double)getTickCount()-time0)/getTickFrequency(); cout<<"训练完成"<<endl; cout<<"训练花费时间:"<<time0<<endl; svm.save("d:/xlw/SVM_HOG_mit_inria(1114pos+12180neg+433hard).xml");//将训练好的SVM模型保存为xml文件 } else //若TRAIN为false,从XML文件读取训练好的分类器 { cout<<"fail train"<<endl; //svm.load("SVM_HOG_2400PosINRIA_12000Neg_HardExample(误报少了漏检多了).xml");//从XML文件读取训练好的SVM模型 svm.load("d:/LBP/SVM_Model.xml"); } /************************************************************************************************* 线性SVM训练完成后得到的XML文件里面,有一个数组,叫做support vector,还有一个数组,叫做alpha,有一个浮点数,叫做rho; 将alpha矩阵同support vector相乘,注意,alpha*supportVector,将得到一个列向量。之后,再该列向量的最后添加一个元素rho。 如此,变得到了一个分类器,利用该分类器,直接替换opencv中行人检测默认的那个分类器(cv::HOGDescriptor::setSVMDetector()), 就可以利用你的训练样本训练出来的分类器进行行人检测了。 ***************************************************************************************************/ DescriptorDim = svm.get_var_count();//特征向量的维数,即HOG描述子的维数 int supportVectorNum = svm.get_support_vector_count();//支持向量的个数 cout<<"支持向量个数:"<<supportVectorNum<<endl; Mat alphaMat = Mat::zeros(1, supportVectorNum, CV_32FC1);//alpha向量,长度等于支持向量个数 Mat supportVectorMat = Mat::zeros(supportVectorNum, DescriptorDim, CV_32FC1);//支持向量矩阵 Mat resultMat = Mat::zeros(1, DescriptorDim, CV_32FC1);//alpha向量乘以支持向量矩阵的结果 //将支持向量的数据复制到supportVectorMat矩阵中 for(int i=0; i<supportVectorNum; i++) { const float * pSVData = svm.get_support_vector(i);//返回第i个支持向量的数据指针 for(int j=0; j<DescriptorDim; j++) { //cout<<pData[j]<<" "; supportVectorMat.at<float>(i,j) = pSVData[j]; } } //将alpha向量的数据复制到alphaMat中 double * pAlphaData = svm.get_alpha_vector();//返回SVM的决策函数中的alpha向量 for(int i=0; i<supportVectorNum; i++) { alphaMat.at<float>(0,i) = pAlphaData[i]; } //计算-(alphaMat * supportVectorMat),结果放到resultMat中 //gemm(alphaMat, supportVectorMat, -1, 0, 1, resultMat);//不知道为什么加负号? resultMat = -1 * alphaMat * supportVectorMat; //得到最终的setSVMDetector(const vector<float>& detector)参数中可用的检测子 vector<float> myDetector; //将resultMat中的数据复制到数组myDetector中 for(int i=0; i<DescriptorDim; i++) { myDetector.push_back(resultMat.at<float>(0,i)); } //最后添加偏移量rho,得到检测子 myDetector.push_back(svm.get_rho()); cout<<"检测子维数:"<<myDetector.size()<<endl; //设置HOGDescriptor的检测子 HOGDescriptor myHOG; myHOG.setSVMDetector(myDetector); //myHOG.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector()); //保存检测子参数到文件 ofstream fout("d:/xlw/HOGDetectorForOpenCV.txt"); for(int i=0; i<myDetector.size(); i++) { fout<<myDetector[i]<<endl; } /**************读入图片进行HOG行人检测******************/ Mat src = imread("d:/timg.png"); //Mat src = imread("2007_000423.jpg"); //Mat src = imread("1.png"); vector<Rect> found, found_filtered;//矩形框数组 cout<<"进行多尺度HOG人体检测"<<endl; myHOG.detectMultiScale(src, found, 0, Size(8,8), Size(32,32), 1.05, 2);//对图片进行多尺度行人检测 //src为输入待检测的图片;found为检测到目标区域列表;参数3为程序内部计算为行人目标的阈值,也就是检测到的特征到SVM分类超平面的距离; //参数4为滑动窗口每次移动的距离。它必须是块移动的整数倍;参数5为图像扩充的大小;参数6为比例系数,即测试图片每次尺寸缩放增加的比例; //参数7为组阈值,即校正系数,当一个目标被多个窗口检测出来时,该参数此时就起了调节作用,为0时表示不起调节作用。 cout<<"找到的矩形框个数:"<<found.size()<<endl; //找出所有没有嵌套的矩形框r,并放入found_filtered中,如果有嵌套的话,则取外面最大的那个矩形框放入found_filtered中 for(int i=0; i < found.size(); i++) { Rect r = found[i]; int j=0; for(; j < found.size(); j++) if(j != i && (r & found[j]) == r) break; if( j == found.size()) found_filtered.push_back(r); } //画矩形框,因为hog检测出的矩形框比实际人体框要稍微大些,所以这里需要做一些调整 for(int i=0; i<found_filtered.size(); i++) { Rect r = found_filtered[i]; r.x += cvRound(r.width*0.1); r.width = cvRound(r.width*0.8); r.y += cvRound(r.height*0.07); r.height = cvRound(r.height*0.8); rectangle(src, r.tl(), r.br(), Scalar(0,255,0), 3); } imwrite("d:/SVM/ImgProcessed3.jpg",src); namedWindow("src",0); imshow("src",src); waitKey();//注意:imshow之后必须加waitKey,否则无法显示图像 /******************读入单个64*128的测试图并对其HOG描述子进行分类*********************/ ////读取测试图片(64*128大小),并计算其HOG描述子 //Mat testImg = imread("person014142.jpg"); //Mat testImg = imread("noperson000026.jpg"); //vector<float> descriptor; //hog.compute(testImg,descriptor,Size(8,8));//计算HOG描述子,检测窗口移动步长(8,8) //Mat testFeatureMat = Mat::zeros(1,3780,CV_32FC1);//测试样本的特征向量矩阵 //将计算好的HOG描述子复制到testFeatureMat矩阵中 //for(int i=0; i<descriptor.size(); i++) // testFeatureMat.at<float>(0,i) = descriptor[i]; //用训练好的SVM分类器对测试图片的特征向量进行分类 //int result = svm.predict(testFeatureMat);//返回类标 //cout<<"分类结果:"<<result<<endl; system("pause"); } ```
python 新手python小问题
第73行的print(classcount) 为什么运行以后 命令行无显示![图片说明](https://img-ask.csdn.net/upload/201804/17/1523976324_975204.png) ``` from math import log import operator def calcShannonEnt(dataSet): numEntires = len(dataSet) #返回数据集的行数 labelCounts = {} #保存每个标签(Label)出现次数的字典 for featVec in dataSet: #对每组特征向量进行统计 currentLabel = featVec[-1] #提取标签(Label)信息 if currentLabel not in labelCounts.keys(): #如果标签(Label)没有放入统计次数的字典,添加进去 labelCounts[currentLabel] = 0 labelCounts[currentLabel] += 1 #Label计数 shannonEnt = 0.0 #经验熵(香农熵) for key in labelCounts: #计算香农熵 prob = float(labelCounts[key]) / numEntires #选择该标签(Label)的概率 shannonEnt -= prob * log(prob, 2) #利用公式计算 return shannonEnt #返回经验熵(香农熵) def createDataSet(): dataSet = [[0, 0, 0, 0, 'no'], #数据集 [0, 0, 0, 1, 'no'], [0, 1, 0, 1, 'yes'], [0, 1, 1, 0, 'yes'], [0, 0, 0, 0, 'no'], [1, 0, 0, 0, 'no'], [1, 0, 0, 1, 'no'], [1, 1, 1, 1, 'yes'], [1, 0, 1, 2, 'yes'], [1, 0, 1, 2, 'yes'], [2, 0, 1, 2, 'yes'], [2, 0, 1, 1, 'yes'], [2, 1, 0, 1, 'yes'], [2, 1, 0, 2, 'yes'], [2, 0, 0, 0, 'no']] labels = ['年龄', '有工作', '有自己的房子', '信贷情况'] #特征标签 return dataSet, labels #返回数据集和分类属性 def splitDataSet(dataSet, axis, value): retDataSet = [] #创建返回的数据集列表 for featVec in dataSet: #遍历数据集 if featVec[axis] == value: reducedFeatVec = featVec[:axis] #去掉axis特征 reducedFeatVec.extend(featVec[axis+1:]) #将符合条件的添加到返回的数据集 retDataSet.append(reducedFeatVec) return retDataSet #返回划分后的数据集 def chooseBestFeatureToSplit(dataSet): numFeatures = len(dataSet[0]) - 1 #特征数量 baseEntropy = calcShannonEnt(dataSet) #计算数据集的香农熵 bestInfoGain = 0.0 #信息增益 bestFeature = -1 #最优特征的索引值 for i in range(numFeatures): #遍历所有特征 #获取dataSet的第i个所有特征 featList = [example[i] for example in dataSet] uniqueVals = set(featList) #创建set集合{},元素不可重复 newEntropy = 0.0 #经验条件熵 for value in uniqueVals: #计算信息增益 subDataSet = splitDataSet(dataSet, i, value) #subDataSet划分后的子集 prob = len(subDataSet) / float(len(dataSet)) #计算子集的概率 newEntropy += prob * calcShannonEnt(subDataSet) #根据公式计算经验条件熵 infoGain = baseEntropy - newEntropy #信息增益 if (infoGain > bestInfoGain): #计算信息增益 bestInfoGain = infoGain #更新信息增益,找到最大的信息增益 bestFeature = i #记录信息增益最大的特征的索引值 return bestFeature #返回信息增益最大的特征的索引值 def majorityCnt(classList): classCount = {} for vote in classList: #统计classList中每个元素出现的次数 if vote not in classCount.keys(): classCount[vote] = 0 classCount[vote] += 1 print(clsssCount) sortedClassCount = sorted(classCount.items(), key = operator.itemgetter(1), reverse = True) #根据字典的值降序排序 return sortedClassCount[0][0] #返回classList中出现次数最多的元素 def createTree(dataSet, labels, featLabels): classList = [example[-1] for example in dataSet] if classList.count(classList[0]) == len(classList): #如果类别完全相同则停止继续划分 return classList[0] if len(dataSet[0]) == 1: #遍历完所有特征时返回出现次数最多的类标签 return majorityCnt(classList) bestFeat = chooseBestFeatureToSplit(dataSet) #选择最优特征 bestFeatLabel = labels[bestFeat] #最优特征的标签 featLabels.append(bestFeatLabel) myTree = {bestFeatLabel:{}} #根据最优特征的标签生成树 del(labels[bestFeat]) featValues = [example[bestFeat] for example in dataSet] #得到训练集中所有最优特征的属性值 uniqueVals = set(featValues) #去掉重复的属性值 for value in uniqueVals: #遍历特征,创建决策树。 myTree[bestFeatLabel][value] = createTree(splitDataSet(dataSet, bestFeat, value), labels, featLabels) return myTree if __name__ == '__main__': dataSet, labels = createDataSet() featLabels = [] myTree = createTree(dataSet, labels, featLabels) ```
keras实现人脸识别,训练失败……请教大神指点迷津!!!
![图片说明](https://img-ask.csdn.net/upload/201904/26/1556209614_615215.jpg) 各位大神,如图所示,在训练过程中,第二轮开始出现问题,这是什么原因呢? 代码如下: ------------------------------------------------- ``` import random import keras import numpy as np import cv2 from sklearn.model_selection import train_test_split from keras.preprocessing.image import ImageDataGenerator from keras.models import Sequential from keras.layers import Dense, Dropout, Activation, Flatten from keras.layers import Convolution2D, MaxPooling2D from keras.optimizers import SGD from keras.utils import np_utils from keras.models import load_model from keras import backend as K from source_data import load_dataset,resize_img #定义数据集格式 class Dataset: def __init__(self, path_name): #训练数据集 self.train_images = None self.train_labels = None #测试集 self.valid_images = None self.valid_labels = None #样本数据 self.test_images = None self.test_labels = None #load路径 self.path_name = path_name #维度顺序 self.input_shape = None #加载数据集并按照交叉验证的原则划分数据集,完成数据预处理 def load(self,img_rows=64, img_cols=64,img_channels = 3,nb_classes = 2): #加载数据集到内存 images,labels=load_dataset(self.path_name)#函数调用 train_images, valid_images, train_labels, valid_labels= train_test_split(images, labels, test_size = 0.3, random_state = random.randint(0, 100)) _, test_images, _, test_labels = train_test_split(images, labels, test_size = 0.5, random_state = random.randint(0, 100)) #根据backend类型确定输入图片数据时的顺序为:channels,rows,cols,否则:rows,cols,channels #这部分代码就是根据keras库要求的维度顺序重组训练数据集 train_images = train_images.reshape(train_images.shape[0], img_rows, img_cols, img_channels) valid_images = valid_images.reshape(valid_images.shape[0], img_rows, img_cols, img_channels) test_images = test_images.reshape(test_images.shape[0], img_rows, img_cols, img_channels) self.input_shape = (img_rows, img_cols, img_channels) #输出训练集、验证集、测试集的数量 print(train_images.shape[0], 'train samples') print(valid_images.shape[0], 'valid samples') print(test_images.shape[0], 'test samples') #我们的模型使用categorical_crossentropy作为损失函数,因此需要根据类别数量nb_classes将 #类别标签进行one-hot编码使其向量化,在这里我们的类别只有两种,经过转化后标签数据变为二维 train_labels = np_utils.to_categorical(train_labels, nb_classes) valid_labels = np_utils.to_categorical(valid_labels, nb_classes) test_labels = np_utils.to_categorical(test_labels, nb_classes) #像素数据浮点化以便归一化 train_images = train_images.astype('float32') valid_images = valid_images.astype('float32') test_images = test_images.astype('float32') #将其归一化,图像的各像素值归一化到0—1区间 train_images /= 255 valid_images /= 255 test_images /= 255 self.train_images = train_images self.valid_images = valid_images self.test_images = test_images self.train_labels = train_labels self.valid_labels = valid_labels self.test_labels = test_labels class Model: def __init__(self): self.model = None #建立keras模型 def build_model(self, dataset, nb_classes = 2): #构建一个空的网络模型,序贯模型或线性堆叠模型,添加各个layer self.model = Sequential() #以下代码将顺序添加CNN网络需要的各层,一个add就是一个网络层 self.model.add(Convolution2D(32, 3, 3, border_mode='same', input_shape = dataset.input_shape)) #1 2维卷积层 self.model.add(Activation('relu')) #2 激活函数层 self.model.add(Convolution2D(32, 3, 3)) #3 2维卷积层 self.model.add(Activation('relu')) #4 激活函数层 self.model.add(MaxPooling2D(pool_size=(2, 2))) #5 池化层 self.model.add(Dropout(0.25)) #6 Dropout层 self.model.add(Convolution2D(64, 3, 3, border_mode='same')) #7 2维卷积层 self.model.add(Activation('relu')) #8 激活函数层 self.model.add(Convolution2D(64, 3, 3)) #9 2维卷积层 self.model.add(Activation('relu')) #10 激活函数层 self.model.add(MaxPooling2D(pool_size=(2, 2))) #11 池化层 self.model.add(Dropout(0.25)) #12 Dropout层 self.model.add(Flatten()) #13 Flatten层 self.model.add(Dense(512)) #14 Dense层,又被称作全连接层 self.model.add(Activation('relu')) #15 激活函数层 self.model.add(Dropout(0.5)) #16 Dropout层 self.model.add(Dense(nb_classes)) #17 Dense层 self.model.add(Activation('softmax')) #18 分类层,输出最终结果 #Prints a string summary of the network self.model.summary() #训练模型 def train(self, dataset, batch_size = 20, nb_epoch = 10, data_augmentation = True): sgd = SGD(lr = 0.01, decay = 1e-6, momentum = 0.9, nesterov = True) #采用随机梯度下降优化器进行训练,首先生成一个优化器对象 self.model.compile(loss='categorical_crossentropy', optimizer=sgd,metrics=['accuracy']) #完成实际的模型配置 #不使用数据提升,所谓的提升就是从我们提供的训练数据中利用旋转、翻转、加噪声等方法提升训练数据规模,增加模型训练量 if not data_augmentation: self.model.fit(dataset.train_images, dataset.train_labels, batch_size = batch_size, epochs = nb_epoch, validation_data = (dataset.valid_images, dataset.valid_labels), shuffle = True) #使用实时数据提升 else: #定义数据生成器用于数据提升,其返回一个生成器对象datagen,datagen每被调用一 #次其生成一组数据(顺序生成),节省内存,其实就是python的数据生成器 datagen = ImageDataGenerator( featurewise_center = False, #是否使输入数据去中心化(均值为0), samplewise_center = False, #是否使输入数据的每个样本均值为0 featurewise_std_normalization = False, #是否数据标准化(输入数据除以数据集的标准差) samplewise_std_normalization = False, #是否将每个样本数据除以自身的标准差 zca_whitening = False, #是否对输入数据施以ZCA白化 rotation_range = 20, #数据提升时图片随机转动的角度(范围为0~180) width_shift_range = 0.2, #数据提升时图片水平偏移的幅度(单位为图片宽度的占比,0~1之间的浮点数) height_shift_range = 0.2, #同上,只不过这里是垂直 horizontal_flip = True, #是否进行随机水平翻转 vertical_flip = False) #是否进行随机垂直翻转 #计算整个训练样本集的数量以用于特征值归一化等处理 datagen.fit(dataset.train_images) #利用生成器开始训练模型—0.7*N self.model.fit_generator(datagen.flow(dataset.train_images, dataset.train_labels, batch_size = batch_size), steps_per_epoch = dataset.train_images.shape[0], epochs = nb_epoch, validation_data = (dataset.valid_images, dataset.valid_labels)) if __name__ == '__main__': dataset = Dataset('e:\saving') dataset.load()#实例操作,完成实际数据加载和预处理 model = Model() model.build_model(dataset) #训练数据 model.train(dataset) ```
关于报错闪退的问题?有没有大神来看一眼。。。。
这是我做柱状图的代码 ``` package com.chenxi.bimquanziguankong.fragment; import android.content.Context; import android.graphics.Color; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.RelativeLayout; import com.alibaba.fastjson.JSON; import com.blankj.utilcode.util.ToastUtils; import com.chenxi.bimquanziguankong.R; import com.chenxi.bimquanziguankong.appConst.AppConst; import com.chenxi.bimquanziguankong.application.MyApplication; import com.chenxi.bimquanziguankong.common.StringAxisValueFormatter; import com.chenxi.bimquanziguankong.entity.InvestmentControlClass; import com.chenxi.bimquanziguankong.view.LineChart02View; import com.chenxi.bimquanziguankong.view.MyMarkerView; import com.github.mikephil.charting.charts.CombinedChart; import com.github.mikephil.charting.components.AxisBase; import com.github.mikephil.charting.components.XAxis; import com.github.mikephil.charting.components.YAxis; import com.github.mikephil.charting.data.BarData; import com.github.mikephil.charting.data.BarDataSet; import com.github.mikephil.charting.data.BarEntry; import com.github.mikephil.charting.data.CombinedData; import com.github.mikephil.charting.data.Entry; import com.github.mikephil.charting.data.LineData; import com.github.mikephil.charting.data.LineDataSet; import com.github.mikephil.charting.formatter.IAxisValueFormatter; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Random; import okhttp3.Call; import okhttp3.Callback; import okhttp3.Request; import okhttp3.Response; public class InvestmentAmountControlFragment extends BaseFragment { private View mView; RelativeLayout rl_document_list_is_null; private CombinedChart combineChart; List<InvestmentControlClass> investmentControlClasses = new ArrayList<>(); private List<String> xAxisValues = new ArrayList<>(); XAxis xAxis; YAxis axisLeft; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mView = inflater.inflate(R.layout.fragment_new_investment_amount_control, container, false); initView(mView); getxAxisValuesData(); getyAxisValuesData(); MyMarkerView myMarkerView = new MyMarkerView(getActivity(), R.layout.custom_marker_view); myMarkerView.setChartView(combineChart); combineChart.setMarker(myMarkerView); return mView; } private void initView(View mView) { rl_document_list_is_null = mView.findViewById(R.id.rl_document_list_is_null); combineChart = mView.findViewById(R.id.combineChart); combineChart.setDrawBorders(true); // 显示边界 combineChart.getDescription().setEnabled(false); // 不显示备注信息 combineChart.setPinchZoom(true); // 比例缩放 } private void getxAxisValuesData() { String url = AppConst.innerIp + "/api/" + AppConst.getProjectID() + "/InvestmentControlClass"; Request request = new Request.Builder() .url(url) .build(); MyApplication.getOkHttpClient().newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { ToastUtils.showShort("数据请求失败"); } @Override public void onResponse(Call call, Response response) throws IOException { if (response.code() == 200) { try { String responseData = response.body().string(); investmentControlClasses = JSON.parseArray(responseData, InvestmentControlClass.class); if (investmentControlClasses.size()!=0){ for (int i = 0; i < investmentControlClasses.size(); i++) { xAxisValues.add(investmentControlClasses.get(i).getName()); } } xAxis = combineChart.getXAxis(); xAxis.setDrawGridLines(false); /*解决左右两端柱形图只显示一半的情况 只有使用CombinedChart时会出现,如果单独使用BarChart不会有这个问题*/ xAxis.setAxisMinimum(-0.5f); xAxis.setAxisMaximum(xAxisValues.size() - 0.5f); xAxis.setGranularity(1f); xAxis.setLabelCount(xAxisValues.size()); // 设置X轴标签数量 xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); // 设置X轴标签位置,BOTTOM在底部显示,TOP在顶部显示 xAxis.setValueFormatter(new StringAxisValueFormatter(xAxisValues)); axisLeft = combineChart.getAxisLeft(); // 获取左边Y轴操作类 axisLeft.setAxisMinimum(0); // 设置最小值 axisLeft.setGranularity(10); // 设置Label间隔 axisLeft.setLabelCount(10); }catch (IOException e){ e.printStackTrace(); } } else { ToastUtils.showShort("数据请求出错!500"); } } }); } private void getyAxisValuesData() { String url = AppConst.innerIp + "/api/" + AppConst.getProjectID() + "/Report/InvestmentControl"; //请求数据 Request fileRrequest = new Request.Builder() .url(url) .build(); Log.e("TAG", "柱状图地址 "+fileRrequest ); MyApplication.getOkHttpClient().newCall(fileRrequest).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { ToastUtils.showShort("数据请求失败"); } @Override public void onResponse(Call call, Response response) throws IOException { if (response.code() == 200) { String responseData = response.body().string(); getActivity().runOnUiThread(new Runnable() { @Override public void run() { JSONArray jsonArray = null; try { jsonArray = new JSONArray(responseData); //获取柱状图数组 List<BarEntry> barEntries = new ArrayList<>(); List<Entry> lineEntry = new ArrayList<>(); if (xAxisValues.size()!=0){ for (int i = 0; i < xAxisValues.size(); i++) { List<String> list = new ArrayList<>(); for (int j = 0; j < jsonArray.length(); j++) { JSONObject jo = new JSONObject(jsonArray.get(j).toString()); if (i > 0) { list.add(jo.getString(xAxisValues.get(i))); } } String[] ary = list.toArray(new String[list.size()]); float a[] = new float[ary.length]; for (int x = 0; x < ary.length; x++) { a[x] = Float.parseFloat(ary[x]); } barEntries.add(new BarEntry(i, a)); float sum = 0; for (int z = 0; z < a.length; z++) { sum = sum + a[z]; } lineEntry.add(new Entry(i, sum)); } } //柱状图数据 BarDataSet barDataSet = new BarDataSet(barEntries, ""); barDataSet.setColors(Color.parseColor("#ae312e"), Color.parseColor("#2a3f4e"), Color.parseColor("#579199") , Color.parseColor("#be765d"), Color.parseColor("#82b49e")); BarData barData = new BarData(); barData.addDataSet(barDataSet); //折线图数据 LineDataSet lineDataSet = new LineDataSet(lineEntry, "总和"); lineDataSet.setColor(Color.parseColor("#b71c1c")); lineDataSet.setCircleColor(Color.parseColor("#b71c1c")); lineDataSet.setValueTextColor(Color.parseColor("#f44336")); lineDataSet.setLineWidth(3f); lineDataSet.setHighlightEnabled(false); LineData lineData = new LineData(); lineData.addDataSet(lineDataSet); //组和图数据 CombinedData combinedData = new CombinedData(); // 创建组合图的数据源 combinedData.setData(barData); // 添加柱形图数据源 combinedData.setData(lineData); // 添加折线图数据源 combineChart.setData(combinedData); // 为组合图设置数据源 combineChart.invalidate(); } catch (JSONException e1) { e1.printStackTrace(); } } }); } else { ToastUtils.showShort(response.message()); } } }); } } ``` 然后偶然会出现闪退的现象报错信息如下有大神帮忙看下吗感激不尽 loge报错信息 ``` 07-17 16:03:30.221 13514-13514/com.chenxi.bimquanziguankong E/CrashHandler: In thread: Thread[main,5,main] UncaughtException detected: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) at java.util.ArrayList.get(ArrayList.java:308) at com.github.mikephil.charting.data.DataSet.getEntryForIndex(DataSet.java:286) at com.github.mikephil.charting.utils.Transformer.generateTransformedValuesLine(Transformer.java:184) at com.github.mikephil.charting.renderer.LineChartRenderer.drawValues(LineChartRenderer.java:547) at com.github.mikephil.charting.renderer.CombinedChartRenderer.drawValues(CombinedChartRenderer.java:96) at com.github.mikephil.charting.charts.BarLineChartBase.onDraw(BarLineChartBase.java:264) at android.view.View.draw(View.java:15231) at android.view.View.updateDisplayListIfDirty(View.java:14167) at android.view.View.getDisplayList(View.java:14189) at android.view.View.draw(View.java:14959) at android.view.ViewGroup.drawChild(ViewGroup.java:3405) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198) at android.view.View.updateDisplayListIfDirty(View.java:14162) at android.view.View.getDisplayList(View.java:14189) at android.view.View.draw(View.java:14959) at android.view.ViewGroup.drawChild(ViewGroup.java:3405) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198) at android.view.View.draw(View.java:15234) at android.widget.FrameLayout.draw(FrameLayout.java:598) at android.view.View.updateDisplayListIfDirty(View.java:14167) at android.view.View.getDisplayList(View.java:14189) at android.view.View.draw(View.java:14959) at android.view.ViewGroup.drawChild(ViewGroup.java:3405) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198) at android.view.View.updateDisplayListIfDirty(View.java:14162) at android.view.View.getDisplayList(View.java:14189) at android.view.View.draw(View.java:14959) at android.view.ViewGroup.drawChild(ViewGroup.java:3405) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198) at android.view.View.draw(View.java:15234) at android.view.View.updateDisplayListIfDirty(View.java:14167) at android.view.View.getDisplayList(View.java:14189) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3389) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3368) at android.view.View.updateDisplayListIfDirty(View.java:14127) at android.view.View.getDisplayList(View.java:14189) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3389) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3368) at android.view.View.updateDisplayListIfDirty(View.java:14127) at android.view.View.getDisplayList(View.java:14189) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3389) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3368) at android.view.View.updateDisplayListIfDirty(View.java:14127) at android.view.View.getDisplayList(View.java:14189) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3389) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3368) at android.view.View.updateDisplayListIfDirty(View.java:14127) at android.view.View.getDisplayList(View.java:14189) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3389) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3368) at android.view.View.updateDisplayListIfDirty(View.java:14127) at android.view.View.getDisplayList(View.java:14189) at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:273) at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:279) at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:318) at android.view.ViewRootImpl.draw(ViewRootImpl.java:2554) at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2376) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2006) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1085) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5909) at android.view.C 07-17 16:03:30.247 13514-13514/com.chenxi.bimquanziguankong E/AndroidRuntime: FATAL EXCEPTION: main Process: com.chenxi.bimquanziguankong, PID: 13514 java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) at java.util.ArrayList.get(ArrayList.java:308) at com.github.mikephil.charting.data.DataSet.getEntryForIndex(DataSet.java:286) at com.github.mikephil.charting.utils.Transformer.generateTransformedValuesLine(Transformer.java:184) at com.github.mikephil.charting.renderer.LineChartRenderer.drawValues(LineChartRenderer.java:547) at com.github.mikephil.charting.renderer.CombinedChartRenderer.drawValues(CombinedChartRenderer.java:96) at com.github.mikephil.charting.charts.BarLineChartBase.onDraw(BarLineChartBase.java:264) at android.view.View.draw(View.java:15231) at android.view.View.updateDisplayListIfDirty(View.java:14167) at android.view.View.getDisplayList(View.java:14189) at android.view.View.draw(View.java:14959) at android.view.ViewGroup.drawChild(ViewGroup.java:3405) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198) at android.view.View.updateDisplayListIfDirty(View.java:14162) at android.view.View.getDisplayList(View.java:14189) at android.view.View.draw(View.java:14959) at android.view.ViewGroup.drawChild(ViewGroup.java:3405) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198) at android.view.View.draw(View.java:15234) at android.widget.FrameLayout.draw(FrameLayout.java:598) at android.view.View.updateDisplayListIfDirty(View.java:14167) at android.view.View.getDisplayList(View.java:14189) at android.view.View.draw(View.java:14959) at android.view.ViewGroup.drawChild(ViewGroup.java:3405) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198) at android.view.View.updateDisplayListIfDirty(View.java:14162) at android.view.View.getDisplayList(View.java:14189) at android.view.View.draw(View.java:14959) at android.view.ViewGroup.drawChild(ViewGroup.java:3405) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198) at android.view.View.draw(View.java:15234) at android.view.View.updateDisplayListIfDirty(View.java:14167) at android.view.View.getDisplayList(View.java:14189) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3389) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3368) at android.view.View.updateDisplayListIfDirty(View.java:14127) at android.view.View.getDisplayList(View.java:14189) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3389) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3368) at android.view.View.updateDisplayListIfDirty(View.java:14127) at android.view.View.getDisplayList(View.java:14189) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3389) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3368) at android.view.View.updateDisplayListIfDirty(View.java:14127) at android.view.View.getDisplayList(View.java:14189) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3389) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3368) at android.view.View.updateDisplayListIfDirty(View.java:14127) at android.view.View.getDisplayList(View.java:14189) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3389) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3368) at android.view.View.updateDisplayListIfDirty(View.java:14127) at android.view.View.getDisplayList(View.java:14189) at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:273) at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:279) at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:318) at android.view.ViewRootImpl.draw(ViewRootImpl.java:2554) at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2376) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2006) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1085) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5909) ```
uiscrollview加载TWRChartView时,只加载了第一个图表的问题
我在viewdidload里面做了数据请求 并在数据请求的成功方法中调用了页面的初始化方法[self chartViewSubView]; 在这个方法中初始化了5个TWRChartView,并添加到一个scrollview当中 然后调用[self myLoadLineChart],将五组数据生成TWRLineChart,并loadLineChart 但是当程序第一次启动后进入到这个页面的时候,只加载了第一个chartview的内容,scrollview滚动的时候,第2-5页都是空的。退出这个页面再进入的时候就能够全部显示了。 现在我只能延迟0.5秒后再执行一遍[self myLoadLineChart],并且让scrollview刷新,才能够在第一次进入的时候全部加载。 这是什么问题?求一个详细一点的解答 数据请求成功部分的代码 [Network networkPOSTRequestWithURL:WORKPLANER body:bodys pageUniquenessIdentifier:bodys result:^(id result) { self.workDic = [[NSDictionary alloc]init]; self.workDic = [result objectForKey:@"output"]; [self scrollSubView];//加载scrollview [self chartViewSubView];//加载5个TWRChartView //[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(myLoadLineChart) userInfo:nil repeats:NO]; //刷新方法,注释掉后只显示第一个图表 [self.HUD hideAnimated:YES]; } 加载chartview的代码 - (void)chartViewSubView{ NSString *jsFilePath = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"js"]; UIView *backview1 = [[UIView alloc]initWithFrame:CGRectMake(10, 40, WIDTH - 20, HEIGHT - 370)]; backview1.layer.cornerRadius = 10; backview1.layer.masksToBounds = YES; backview1.layer.borderColor = [UIColor lightGrayColor].CGColor; backview1.layer.borderWidth = 1; backview1.backgroundColor = [UIColor whiteColor]; [self.scroll addSubview:backview1]; _chartView1 = [[TWRChartView alloc] initWithFrame:CGRectMake(15, 45, WIDTH - 30, HEIGHT - 380)]; _chartView1.backgroundColor = [UIColor whiteColor]; [_chartView1 setChartJsFilePath:jsFilePath]; [self.scroll addSubview:_chartView1]; UIView *backview2 = [[UIView alloc]initWithFrame:CGRectMake(10 + WIDTH, 40, WIDTH - 20, HEIGHT - 370)]; backview2.layer.cornerRadius = 10; backview2.layer.masksToBounds = YES; backview2.layer.borderColor = [UIColor lightGrayColor].CGColor; backview2.layer.borderWidth = 1; backview2.backgroundColor = [UIColor whiteColor]; [self.scroll addSubview:backview2]; _chartView2 = [[TWRChartView alloc] initWithFrame:CGRectMake(WIDTH + 15, 45, WIDTH - 30, HEIGHT - 380)]; _chartView2.backgroundColor = [UIColor whiteColor]; [_chartView2 setChartJsFilePath:jsFilePath]; [self.scroll addSubview:_chartView2]; UIView *backview3 = [[UIView alloc]initWithFrame:CGRectMake(10 + WIDTH * 2, 40, WIDTH - 20, HEIGHT - 370)]; backview3.layer.cornerRadius = 10; backview3.layer.masksToBounds = YES; backview3.layer.borderColor = [UIColor lightGrayColor].CGColor; backview3.layer.borderWidth = 1; backview3.backgroundColor = [UIColor whiteColor]; [self.scroll addSubview:backview3]; _chartView3 = [[TWRChartView alloc] initWithFrame:CGRectMake(WIDTH * 2 + 15, 45, WIDTH - 30, HEIGHT - 380)]; _chartView3.backgroundColor = [UIColor whiteColor]; [_chartView3 setChartJsFilePath:jsFilePath]; [self.scroll addSubview:_chartView3]; UIView *backview4 = [[UIView alloc]initWithFrame:CGRectMake(10 + WIDTH * 3, 40, WIDTH - 20, HEIGHT - 370)]; backview4.layer.cornerRadius = 10; backview4.layer.masksToBounds = YES; backview4.layer.borderColor = [UIColor lightGrayColor].CGColor; backview4.layer.borderWidth = 1; backview4.backgroundColor = [UIColor whiteColor]; [self.scroll addSubview:backview4]; _chartView4 = [[TWRChartView alloc] initWithFrame:CGRectMake(WIDTH * 3 + 15, 45, WIDTH - 30, HEIGHT - 380)]; _chartView4.backgroundColor = [UIColor whiteColor]; [_chartView4 setChartJsFilePath:jsFilePath]; [self.scroll addSubview:_chartView4]; UIView *backview5 = [[UIView alloc]initWithFrame:CGRectMake(10 + WIDTH * 4, 40, WIDTH - 20, HEIGHT - 370)]; backview5.layer.cornerRadius = 10; backview5.layer.masksToBounds = YES; backview5.layer.borderColor = [UIColor lightGrayColor].CGColor; backview5.layer.borderWidth = 1; backview5.backgroundColor = [UIColor whiteColor]; [self.scroll addSubview:backview5]; _chartView5 = [[TWRChartView alloc] initWithFrame:CGRectMake(WIDTH * 4 + 15, 45, WIDTH - 30, HEIGHT - 380)]; _chartView5.backgroundColor = [UIColor whiteColor]; [_chartView5 setChartJsFilePath:jsFilePath]; [self.scroll addSubview:_chartView5]; [self myLoadLineChart];//在这里调用加载TWRLineChart的方法 } 加载TWRLineChart的方法 - (void)myLoadLineChart { NSArray *listArr = @[@"dayList",@"oilkmList",@"mileList",@"oilList",@"otherList"]; for (int t = 0; t < listArr.count; t++) { NSMutableArray *arr1 = [[self.workDic objectForKey:listArr[t]] objectForKey:@"chartData1"]; NSMutableArray *arr2 = [[self.workDic objectForKey:listArr[t]] objectForKey:@"chartData2"]; NSMutableArray *arr3 = [[self.workDic objectForKey:listArr[t]] objectForKey:@"chartData3"]; NSMutableArray *arr4 = [[self.workDic objectForKey:listArr[t]] objectForKey:@"chartData4"]; NSMutableArray *arr5 = [[self.workDic objectForKey:listArr[t]] objectForKey:@"chartData5"]; NSMutableArray *arr = [[NSMutableArray alloc]init]; arr = [[self.workDic objectForKey:listArr[t]] objectForKey:@"chartDate"]; //预设颜色 UIColor *strokeColor1 = [UIColor orangeColor]; UIColor *strokeColor2 = [UIColor redColor]; UIColor *strokeColor3 = [UIColor blueColor]; UIColor *strokeColor4 = [UIColor purpleColor]; UIColor *strokeColor5 = [UIColor greenColor]; //当数据为单条时,添加单个数据 if ([arr count] == 1) { [arr insertObject:@"" atIndex:0]; [arr1 insertObject:@"0" atIndex:0]; [arr2 insertObject:@"0" atIndex:0]; [arr3 insertObject:@"0" atIndex:0]; [arr4 insertObject:@"0" atIndex:0]; [arr5 insertObject:@"0" atIndex:0]; } if ([arr count] > 0 && [[arr objectAtIndex:0] isEqualToString:@""]) { //当单条数据时,线路颜色设为无色 strokeColor1 = [UIColor clearColor]; strokeColor2 = [UIColor clearColor]; strokeColor3 = [UIColor clearColor]; strokeColor4 = [UIColor clearColor]; strokeColor5 = [UIColor clearColor]; } TWRDataSet *dataSet1 = [[TWRDataSet alloc] initWithDataPoints:arr1 fillColor:[[UIColor whiteColor] colorWithAlphaComponent:0.0] strokeColor:strokeColor1 pointColor:[UIColor orangeColor] pointStrokeColor:[UIColor orangeColor]]; TWRDataSet *dataSet2 = [[TWRDataSet alloc] initWithDataPoints:arr2 fillColor:[[UIColor whiteColor] colorWithAlphaComponent:0.0] strokeColor:strokeColor2 pointColor:[UIColor redColor] pointStrokeColor:[UIColor redColor]]; TWRDataSet *dataSet3 = [[TWRDataSet alloc] initWithDataPoints:arr3 fillColor:[[UIColor whiteColor] colorWithAlphaComponent:0.0] strokeColor:strokeColor3 pointColor:[UIColor blueColor] pointStrokeColor:[UIColor blueColor]]; TWRDataSet *dataSet4 = [[TWRDataSet alloc] initWithDataPoints:arr4 fillColor:[[UIColor whiteColor] colorWithAlphaComponent:0.0] strokeColor:strokeColor4 pointColor:[UIColor purpleColor] pointStrokeColor:[UIColor purpleColor]]; TWRDataSet *dataSet5 = [[TWRDataSet alloc] initWithDataPoints:arr5 fillColor:[[UIColor whiteColor] colorWithAlphaComponent:0.0] strokeColor:strokeColor5 pointColor:[UIColor greenColor] pointStrokeColor:[UIColor greenColor]]; NSArray * dataD = @[arr1, arr2, arr3, arr4, arr5]; NSArray * data = @[dataSet1, dataSet2, dataSet3, dataSet4, dataSet5]; NSMutableArray *muArr = [[NSMutableArray alloc]init]; for (int i = 0; i < dataD.count; i++) { if ([dataD[i] count] != 0) { [muArr addObject:data[i]]; } } NSArray *labels = arr; TWRLineChart *line = [[TWRLineChart alloc] initWithLabels:labels dataSets:muArr animated:NO curved:NO]; // Load data if (t == 0) { [_chartView1 loadLineChart:line]; }else if(t == 1){ [_chartView2 loadLineChart:line]; }else if(t == 2){ [_chartView3 loadLineChart:line]; }else if(t == 3){ [_chartView4 loadLineChart:line]; }else if(t == 4){ [_chartView5 loadLineChart:line]; } } //[self.scroll reloadInputViews]; }
opencv svm detector该怎么写?
我用64*128的图片,hog特征+svm可以成功检测出行人。但是换成64*64尺寸的图片,可以训练出svm模型,但是检测时会出错,觉得应该是detector的问题,但是不知道该怎么重写? 对提取好的HogFeatureMat进行pca降维后检测同样会出现类似的错误。detector该怎么重写,里面哪些参数需要调整?谢谢。代码如下 ``` #include <iostream> #include <fstream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/objdetect/objdetect.hpp> #include <opencv2/ml/ml.hpp> using namespace std; using namespace cv; #define PosSamNO 1114 //正样本个数 #define NegSamNO 12180 //负样本个数 #define TRAIN false//是否进行训练,true表示重新训练,false表示读取xml文件中的SVM模型 #define CENTRAL_CROP false //true:训练时,对96*160的INRIA正样本图片剪裁出中间的64*128大小人体 //HardExample:负样本个数。如果HardExampleNO大于0,表示处理完初始负样本集后,继续处理HardExample负样本集。 //不使用HardExample时必须设置为0,因为特征向量矩阵和特征类别矩阵的维数初始化时用到这个值 #define HardExampleNO 433 //继承自CvSVM的类,因为生成setSVMDetector()中用到的检测子参数时,需要用到训练好的SVM的decision_func参数, //但通过查看CvSVM源码可知decision_func参数是protected类型变量,无法直接访问到,只能继承之后通过函数访问 class MySVM : public CvSVM { public: //获得SVM的决策函数中的alpha数组 double * get_alpha_vector() { return this->decision_func->alpha; } //获得SVM的决策函数中的rho参数,即偏移量 float get_rho() { return this->decision_func->rho; } }; int main() { //检测窗口(64,128),块尺寸(16,16),块步长(8,8),cell尺寸(8,8),直方图bin个数9 HOGDescriptor hog(Size(64,128),Size(16,16),Size(8,8),Size(8,8),9);//HOG检测器,用来计算HOG描述子的 int DescriptorDim;//HOG描述子的维数,由图片大小、检测窗口大小、块大小、细胞单元中直方图bin个数决定 MySVM svm;//SVM分类器 //若TRAIN为true,重新训练分类器 if(TRAIN) { string ImgName;//图片名(绝对路径) ifstream finPos("d:/hogmit/pos/pos.txt");//正样本图片的文件名列表 //ifstream finPos("PersonFromVOC2012List.txt");//正样本图片的文件名列表 ifstream finNeg("d:/hogmit/neg/neg.txt");//负样本图片的文件名列表 Mat sampleFeatureMat;//所有训练样本的特征向量组成的矩阵,行数等于所有样本的个数,列数等于HOG描述子维数 Mat sampleLabelMat;//训练样本的类别向量,行数等于所有样本的个数,列数等于1;1表示有人,-1表示无人 //依次读取正样本图片,生成HOG描述子 for(int num=0; num<PosSamNO && getline(finPos,ImgName); num++) { cout<<"处理:"<<ImgName<<endl; //ImgName = "D:\\DataSet\\PersonFromVOC2012\\" + ImgName;//加上正样本的路径名 ImgName = "d:/hogmit/pos/" + ImgName;//加上正样本的路径名 Mat src = imread(ImgName);//读取图片 if(CENTRAL_CROP) src = src(Rect(16,16,64,128));//将96*160的INRIA正样本图片剪裁为64*128,即剪去上下左右各16个像素 //resize(src,src,Size(64,128)); vector<float> descriptors;//HOG描述子向量 hog.compute(src,descriptors,Size(8,8));//计算HOG描述子,检测窗口移动步长(8,8) // cout<<"描述子维数:"<<descriptors.size()<<endl; //处理第一个样本时初始化特征向量矩阵和类别矩阵,因为只有知道了特征向量的维数才能初始化特征向量矩阵 if( 0 == num ) { DescriptorDim = descriptors.size();//HOG描述子的维数 //初始化所有训练样本的特征向量组成的矩阵,行数等于所有样本的个数,列数等于HOG描述子维数sampleFeatureMat sampleFeatureMat = Mat::zeros(PosSamNO+NegSamNO+HardExampleNO, DescriptorDim, CV_32FC1); //初始化训练样本的类别向量,行数等于所有样本的个数,列数等于1;1表示有人,0表示无人 sampleLabelMat = Mat::zeros(PosSamNO+NegSamNO+HardExampleNO, 1, CV_32FC1); } //将计算好的HOG描述子复制到样本特征矩阵sampleFeatureMat for(int i=0; i<DescriptorDim; i++) sampleFeatureMat.at<float>(num,i) = descriptors[i];//第num个样本的特征向量中的第i个元素 sampleLabelMat.at<float>(num,0) = 1;//正样本类别为1,有人 } //依次读取负样本图片,生成HOG描述子 for(int num=0; num<NegSamNO && getline(finNeg,ImgName); num++) { cout<<"处理:"<<ImgName<<endl; ImgName = "d:/hogmit/neg/" + ImgName;//加上负样本的路径名 Mat src = imread(ImgName);//读取图片 //resize(src,img,Size(64,128)); vector<float> descriptors;//HOG描述子向量 hog.compute(src,descriptors,Size(8,8));//计算HOG描述子,检测窗口移动步长(8,8) //cout<<"描述子维数:"<<descriptors.size()<<endl; //将计算好的HOG描述子复制到样本特征矩阵sampleFeatureMat for(int i=0; i<DescriptorDim; i++) sampleFeatureMat.at<float>(num+PosSamNO,i) = descriptors[i];//第PosSamNO+num个样本的特征向量中的第i个元素 sampleLabelMat.at<float>(num+PosSamNO,0) = -1;//负样本类别为-1,无人 } //处理HardExample负样本 if(HardExampleNO > 0) { ifstream finHardExample("d:/hogmit/hard/hard.txt");//HardExample负样本的文件名列表 //依次读取HardExample负样本图片,生成HOG描述子 for(int num=0; num<HardExampleNO && getline(finHardExample,ImgName); num++) { cout<<"处理:"<<ImgName<<endl; ImgName = "d:/hogmit/hard/" + ImgName;//加上HardExample负样本的路径名 Mat src = imread(ImgName);//读取图片 //resize(src,img,Size(64,128)); vector<float> descriptors;//HOG描述子向量 hog.compute(src,descriptors,Size(8,8));//计算HOG描述子,检测窗口移动步长(8,8) //cout<<"描述子维数:"<<descriptors.size()<<endl; //将计算好的HOG描述子复制到样本特征矩阵sampleFeatureMat for(int i=0; i<DescriptorDim; i++) sampleFeatureMat.at<float>(num+PosSamNO+NegSamNO,i) = descriptors[i];//第PosSamNO+num个样本的特征向量中的第i个元素 sampleLabelMat.at<float>(num+PosSamNO+NegSamNO,0) = -1;//负样本类别为-1,无人 } } //输出样本的HOG特征向量矩阵到文件 ofstream fout("d:/hogmit/SampleFeatureMat.txt"); for(int i=0; i<PosSamNO+NegSamNO; i++) { fout<<i<<endl; for(int j=0; j<DescriptorDim; j++) { fout<<sampleFeatureMat.at<float>(i,j)<<" "; } fout<<endl; } //训练SVM分类器 //迭代终止条件,当迭代满1000次或误差小于FLT_EPSILON时停止迭代 CvTermCriteria criteria = cvTermCriteria(CV_TERMCRIT_ITER+CV_TERMCRIT_EPS, 1000, FLT_EPSILON); //SVM参数:SVM类型为C_SVC;线性核函数;松弛因子C=0.01 CvSVMParams param(CvSVM::C_SVC, CvSVM::LINEAR, 0, 1, 0, 0.01, 0, 0, 0, criteria); cout<<"开始训练SVM分类器"<<endl; svm.train(sampleFeatureMat,sampleLabelMat, Mat(), Mat(), param);//训练分类器 cout<<"训练完成"<<endl; svm.save("d:/hogmit/SVM_HOG_mit_inria(1114pos+12180neg+433hard).xml");//将训练好的SVM模型保存为xml文件 } else //若TRAIN为false,从XML文件读取训练好的分类器 { cout<<"fail train"<<endl; //svm.load("SVM_HOG_2400PosINRIA_12000Neg_HardExample(误报少了漏检多了).xml");//从XML文件读取训练好的SVM模型 svm.load("d:/hogmit/SVM_HOG_2400PosINRIA_12000Neg_HardExample(误报少了漏检多了).xml"); } /************************************************************************************************* 线性SVM训练完成后得到的XML文件里面,有一个数组,叫做support vector,还有一个数组,叫做alpha,有一个浮点数,叫做rho; 将alpha矩阵同support vector相乘,注意,alpha*supportVector,将得到一个列向量。之后,再该列向量的最后添加一个元素rho。 如此,变得到了一个分类器,利用该分类器,直接替换opencv中行人检测默认的那个分类器(cv::HOGDescriptor::setSVMDetector()), 就可以利用你的训练样本训练出来的分类器进行行人检测了。 ***************************************************************************************************/ DescriptorDim = svm.get_var_count();//特征向量的维数,即HOG描述子的维数 int supportVectorNum = svm.get_support_vector_count();//支持向量的个数 cout<<"支持向量个数:"<<supportVectorNum<<endl; Mat alphaMat = Mat::zeros(1, supportVectorNum, CV_32FC1);//alpha向量,长度等于支持向量个数 Mat supportVectorMat = Mat::zeros(supportVectorNum, DescriptorDim, CV_32FC1);//支持向量矩阵 Mat resultMat = Mat::zeros(1, DescriptorDim, CV_32FC1);//alpha向量乘以支持向量矩阵的结果 //将支持向量的数据复制到supportVectorMat矩阵中 for(int i=0; i<supportVectorNum; i++) { const float * pSVData = svm.get_support_vector(i);//返回第i个支持向量的数据指针 for(int j=0; j<DescriptorDim; j++) { //cout<<pData[j]<<" "; supportVectorMat.at<float>(i,j) = pSVData[j]; } } //将alpha向量的数据复制到alphaMat中 double * pAlphaData = svm.get_alpha_vector();//返回SVM的决策函数中的alpha向量 for(int i=0; i<supportVectorNum; i++) { alphaMat.at<float>(0,i) = pAlphaData[i]; } //计算-(alphaMat * supportVectorMat),结果放到resultMat中 //gemm(alphaMat, supportVectorMat, -1, 0, 1, resultMat);//不知道为什么加负号? resultMat = -1 * alphaMat * supportVectorMat; //得到最终的setSVMDetector(const vector<float>& detector)参数中可用的检测子 vector<float> myDetector; //将resultMat中的数据复制到数组myDetector中 for(int i=0; i<DescriptorDim; i++) { myDetector.push_back(resultMat.at<float>(0,i)); } //最后添加偏移量rho,得到检测子 myDetector.push_back(svm.get_rho()); cout<<"检测子维数:"<<myDetector.size()<<endl; //设置HOGDescriptor的检测子 HOGDescriptor myHOG; myHOG.setSVMDetector(myDetector); //myHOG.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector()); //保存检测子参数到文件 ofstream fout("d:/hogmit/HOGDetectorForOpenCV.txt"); for(int i=0; i<myDetector.size(); i++) { fout<<myDetector[i]<<endl; } /**************读入图片进行HOG行人检测******************/ Mat src = imread("d:/hogmit/无标题.png"); //Mat src = imread("2007_000423.jpg"); //Mat src = imread("1.png"); vector<Rect> found, found_filtered;//矩形框数组 cout<<"进行多尺度HOG人体检测"<<endl; myHOG.detectMultiScale(src, found, 0, Size(8,8), Size(32,32), 1.05, 2);//对图片进行多尺度行人检测 //src为输入待检测的图片;found为检测到目标区域列表;参数3为程序内部计算为行人目标的阈值,也就是检测到的特征到SVM分类超平面的距离; //参数4为滑动窗口每次移动的距离。它必须是块移动的整数倍;参数5为图像扩充的大小;参数6为比例系数,即测试图片每次尺寸缩放增加的比例; //参数7为组阈值,即校正系数,当一个目标被多个窗口检测出来时,该参数此时就起了调节作用,为0时表示不起调节作用。 cout<<"找到的矩形框个数:"<<found.size()<<endl; //找出所有没有嵌套的矩形框r,并放入found_filtered中,如果有嵌套的话,则取外面最大的那个矩形框放入found_filtered中 for(int i=0; i < found.size(); i++) { Rect r = found[i]; int j=0; for(; j < found.size(); j++) if(j != i && (r & found[j]) == r) break; if( j == found.size()) found_filtered.push_back(r); } //画矩形框,因为hog检测出的矩形框比实际人体框要稍微大些,所以这里需要做一些调整 for(int i=0; i<found_filtered.size(); i++) { Rect r = found_filtered[i]; r.x += cvRound(r.width*0.1); r.width = cvRound(r.width*0.8); r.y += cvRound(r.height*0.07); r.height = cvRound(r.height*0.8); rectangle(src, r.tl(), r.br(), Scalar(0,255,0), 3); } imwrite("d:/hogmit/ImgProcessed3.jpg",src); namedWindow("src",0); imshow("src",src); waitKey();//注意:imshow之后必须加waitKey,否则无法显示图像 /******************读入单个64*128的测试图并对其HOG描述子进行分类*********************/ ////读取测试图片(64*128大小),并计算其HOG描述子 //Mat testImg = imread("person014142.jpg"); //Mat testImg = imread("noperson000026.jpg"); //vector<float> descriptor; //hog.compute(testImg,descriptor,Size(8,8));//计算HOG描述子,检测窗口移动步长(8,8) //Mat testFeatureMat = Mat::zeros(1,3780,CV_32FC1);//测试样本的特征向量矩阵 //将计算好的HOG描述子复制到testFeatureMat矩阵中 //for(int i=0; i<descriptor.size(); i++) // testFeatureMat.at<float>(0,i) = descriptor[i]; //用训练好的SVM分类器对测试图片的特征向量进行分类 //int result = svm.predict(testFeatureMat);//返回类标 //cout<<"分类结果:"<<result<<endl; system("pause"); } ```
相见恨晚的超实用网站
相见恨晚的超实用网站 持续更新中。。。
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
有哪些让程序员受益终生的建议
从业五年多,辗转两个大厂,出过书,创过业,从技术小白成长为基层管理,联合几个业内大牛回答下这个问题,希望能帮到大家,记得帮我点赞哦。 敲黑板!!!读了这篇文章,你将知道如何才能进大厂,如何实现财务自由,如何在工作中游刃有余,这篇文章很长,但绝对是精品,记得帮我点赞哦!!!! 一腔肺腑之言,能看进去多少,就看你自己了!!! 目录: 在校生篇: 为什么要尽量进大厂? 如何选择语言及方...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
JavaScript 为什么能活到现在?
作者 | 司徒正美 责编 |郭芮 出品 | CSDN(ID:CSDNnews) JavaScript能发展到现在的程度已经经历不少的坎坷,早产带来的某些缺陷是永久性的,因此浏览器才有禁用JavaScript的选项。甚至在jQuery时代有人问出这样的问题,jQuery与JavaScript哪个快?在Babel.js出来之前,发明一门全新的语言代码代替JavaScript...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
Python 编程开发 实用经验和技巧
Python是一门很灵活的语言,也有很多实用的方法,有时候实现一个功能可以用多种方法实现,我这里总结了一些常用的方法和技巧,包括小数保留指定位小数、判断变量的数据类型、类方法@classmethod、制表符中文对齐、遍历字典、datetime.timedelta的使用等,会持续更新......
吐血推荐珍藏的Visual Studio Code插件
作为一名Java工程师,由于工作需要,最近一个月一直在写NodeJS,这种经历可以说是一部辛酸史了。好在有神器Visual Studio Code陪伴,让我的这段经历没有更加困难。眼看这段经历要告一段落了,今天就来给大家分享一下我常用的一些VSC的插件。 VSC的插件安装方法很简单,只需要点击左侧最下方的插件栏选项,然后就可以搜索你想要的插件了。 下面我们进入正题 Material Theme ...
实战:如何通过python requests库写一个抓取小网站图片的小爬虫
有点爱好的你,偶尔应该会看点图片文字,最近小网站经常崩溃消失,不如想一个办法本地化吧,把小照片珍藏起来! 首先,准备一个珍藏的小网站,然后就可以开始啦! 第一步 我们先写一个获取网站的url的链接,因为url常常是由page或者,其他元素构成,我们就把他分离出来,我找到的网站主页下有图片区 图片区内有标题页,一个标题里有10张照片大概 所以步骤是: 第一步:进入图片区的标题页 def getH...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Python 植物大战僵尸代码实现(2):植物卡片选择和种植
这篇文章要介绍的是: - 上方植物卡片栏的实现。 - 点击植物卡片,鼠标切换为植物图片。 - 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
为什么要学数据结构?
一、前言 在可视化化程序设计的今天,借助于集成开发环境可以很快地生成程序,程序设计不再是计算机专业人员的专利。很多人认为,只要掌握几种开发工具就可以成为编程高手,其实,这是一种误解。要想成为一个专业的开发人员,至少需要以下三个条件: 1) 能够熟练地选择和设计各种数据结构和算法 2) 至少要能够熟练地掌握一门程序设计语言 3) 熟知所涉及的相关应用领域的知识 其中,后两个条件比较容易实现,而第一个...
金山办公上市,雷军心愿了却!
作者 | 胡巍巍 出品 | CSDN(ID:CSDNnews) 11月17日,大周末的,雷军微博发了个重磅消息: “明天将是里程碑式的一天,金山办公终于成功在科创板挂牌上市了! 从1988年金山创办到今天,WPS走了整整31年。 从1999年以金山办公为主体准备上市算起,这一天,我们等了20年。 WPS和金山的历程,这是一个坚持梦想并最终取得胜利的励志故事。期待大家的祝福!”...
8年经验面试官详解 Java 面试秘诀
作者 |胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。 Java程序员准备和投递简历的实...
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车?某胡同口的煎饼摊一年能卖出多少个煎饼?深圳有多少个产品经理?一辆公交车里能装下多少个乒乓球?一个正常成年人有多少根头发?这类估算问题,被称为费米问题,是以科学家费米命名的。为什么面试会问这种问题呢?这类问题能把两类人清楚地区分出来。一类是具有文科思维的人,擅长赞叹和模糊想象,它主要依靠的是人的第一反应和直觉,比如小孩...
碎片化的时代,如何学习
今天周末,和大家聊聊学习这件事情。 在如今这个社会,我们的时间被各类 APP 撕的粉碎。 刷知乎、刷微博、刷朋友圈; 看论坛、看博客、看公号; 等等形形色色的信息和知识获取方式一个都不错过。 貌似学了很多,但是却感觉没什么用。 要解决上面这些问题,首先要分清楚一点,什么是信息,什么是知识。 那什么是信息呢? 你一切听到的、看到的,都是信息,比如微博上的明星出轨、微信中的表情大战、抖音上的...
腾讯“疯狂”开源!
作者 | 马超 责编 | 胡巍巍 出品 | CSDN(ID:CSDNnews) 近日,腾讯自研的万亿级分布式消息中间件TubeMQ正式开源,并捐赠给Apache基金会,成为基金会官方认可的Incubator项目。 我们知道与TubeMQ功能类似的kafka是领英公司在早在10年前捐赠给Apache基金会的金牌项目,而那时的腾讯还在忙于3Q大战,公司文化也相对封闭,甚至连目前社交领...
相关热词 c# 引用mysql c#动态加载非托管dll c# 两个表数据同步 c# 返回浮点json c# imap 链接状态 c# 漂亮字 c# 上取整 除法 c#substring c#中延时关闭 c#线段拖拉
立即提问

相似问题

3
C# 学生成绩管理系统 向数据库中添加数据失败
0
handsontable是否有办法实现Echarts图的dataset数据形式
1
TensorFlow的Keras如何使用Dataset作为数据输入?
0
求助:torchvision框架处理cifar10数据集出错
1
FLIR 红外数据集(FREE FLIR Thermal Dataset for Algorithm Training)
1
数据库的二进制数据变成图调试过程中老是出现其他信息: 索引超出了数组界限的问题 怎么解决?
1
使用tensorflow的API dataset遇到memoryerror
1
VS中用自带的chart生成的图,一个位置上一共要有100多次图,每次如何改变数据库连接的内容
1
[flink]Gelly如何计算从KAFKA中读取的Datastream型数据?
1
C#中序列化的dataSet对象,在java中如何解析
4
在C#中如何使窗体间传combobox当前选中的值,而不是初始化后的combobox的第一个数据
2
sql语句中多表查询问题
2
当sql语句中从两表中查询的两列模糊时,如何处理
1
获取不到数据库的集合(结果列表没数据)?
1
列表循环渲染失败,获取不到数据库的集合,请问什么原因?
1
使用pytorch的dataloader时报错:RuntimeError: DataLoader worker (pid(s) 1004, 4680) exited unexpectedly
1
我在用facenet模型中的classifier.py文件中训练自己的数据集的时候配置了相关参数所在的路径,但是却发生了如下报错,请问是什么原因?
2
求大佬解决could not convert string to float问题
1
如何删除dataset中的某行数据和添加多组数据
1
如何删除dataset中的某行数据