User Tag List

Trang 1/2 12 cuốicuối
kết quả từ 1 tới 10 trên 20
Cây cảm ơn12Cảm ơn

Ðề tài: QT4- Lập trình nhúng trên Ubuntu

  
  1. #1
    Thành viên mới tuylipden's Avatar
    Tham gia
    Sep 2011
    Bài viết
    13
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    QT4- Lập trình nhúng trên Ubuntu

    Đã lâu rồi không thấy anh em trên diễn đàn nhắc đến QT nữa nhỉ ? Hiện tại mình đang làm một đề tài liên qua đến truyền video thời gian thực trên máy tính nhúng sử dụng mạng addhoc và lập trình trên QT4. Mình có rất nhiều điều muốn hỏi và mong được sự góp ý của anh em. Đồng thời qua đây cũng mong muốn QT ngày càng phát triển bởi quả thực nó là một Platform rất hay. Các công cụ có thể sánh ngang với visual. Trước hết mình xin bắt đầu vào phần cài đặt và sử dụng nhé sơ qua nhé

    Để cài đặt QT4 trên ubuntu (10.10) bạn có 2 cách :
    -Thứ nhất cài đặt trong Applications>Ubuntu Software Center .Bạn gõ Qt vào phần Search và cài đặt các phần Qt4 Designer, Qt4 Assistant, Qt4 Linguist, Qt4 Settings và cuối cùng là IDE riêng của QT QT Creator

    -Thứ hai bạn có thể vào trang chủ của QT và down bộ cài đầy đủ ( gói SDK ) : Download Qt, the cross-platform application framework — Qt - A cross-platform application and UI framework
    Sau khi bạn down gói SDK ( có đuôi là .run ) thì tiến hành cài đặt ,bạn chuyển gói này vào home, mở Terminal và gõ :
    chmod u+x Qt_SDK_Lin32_offline_v1_1_3_en.run
    gõ tiếp
    ./Qt_SDK_Lin32_offline_v1_1_3_en.run
    Theo mình nên cài theo cách thứ nhất. Bởi bản ubuntu 10.10 trở đi đã hỗ trợ đầy đủ cho Qt. Còn nếu bạn dùng phiên bản thấp hơn 10.10 thì nên cài theo cách thứ 2.

    Tiếp theo mình xin làm một ví dụ nho nhỏ với Qt. Load ảnh từ máy tính và hiển thị
    Bước 1: Tạo project của Qt.
    Bạn vào Applications >Programing >QT Creator .Giao diện của Qt Creator hiện lên như sau

    Click here to enlarge

    Bạn chọn Create Project
    Tiếp theo bạn chọn loại project, ở đây mình sử dụng là Qt C++ Project> Qt Gui Application. Cuối cùng mình ấn choose và cửa sổ đặt tên project hiện ra

    Click here to enlarge

    Sau khi đặt tên bạn chọn Next thì Qt sẽ yêu cầu bạn đặt tên cho class khởi đầu của chương trình ( Đây chỉ là một thủ tục, bạn có thể đặt tên rồi khi viết chương trình không sử dụng class này cũng chẳng sao ).

    Click here to enlarge

    Trong vd này mình đặt tên Class là ShowImage.Chọn Base class là QWidget (lớp giao diện).Cuối cùng ấn Finish để bắt đầu lập trình.

    Mình sẽ nói qua về các thành phần của một lớp trong QT
    Một lớp trong Qt sẽ bao gốm 3 thành phần là :
    Header file ( đuôi .h ), thành phần này có chức năng chứa các hàm, các biến toàn cục, con trỏ, hoặc cấp phát bộ nhớ cần khai báo để sử dụng trong class.

    Thành phần thứ hai là Source file ( đuôi .cpp ), thành phần này chứa các định nghĩa hàm, chức năng các hàm trong class. Đây là thành phần quan trọng nhất trong Qt.

    Thành phần thứ 3 là Form file ( đuôi .ui ). Tùy từng class và cách chọn của người sử dụng mà thành phần này có trong chương trình. Thành phần này giúp người sử dụng tạo giao diện dễ dàng hơn thông qua kéo thả đồng thời tương tác với các thành phần của giao diện ( button, label .... ) khá dễ dàng. Nếu không sử dụng thành phần này bạn cũng hoàn toàn có thể code giao diện trong file.cpp. Tất nhiên không thể thuận tiện và dễ quản lí như Form.

    Bước 2 :Sau khi tạo project thì chúng ta bắt đầu lập trình thôi
    Trước tiên mình vào form. Trong cột Project bạn click vào showimage.ui
    Trong form này mình kéo thả tạo ra 2 cái label với tên là lbl_Hello ( Cái này dùng để hiện thị chữ "Hello" ) và lbl_Image ( Cái này là để show ảnh ).

    Click here to enlarge

    Sau khi tạo xong mình quay về showimage, viết chữ "Hello" bằng cách sử dụng hàm setText()
    ui->lbl_hello->setText("Hello");
    Để hiện thị ảnh thì trước tiên bạn cần phải tạo một biết kiểu QImage ( Đây là một kiểu biến của Qt để xử lí ảnh) và load ảnh từ ổ cứng lên
    Qimage image("qt4.png");
    Chú ý bạn phải để ảnh trong thư mục build project nhé. Ở đây của mình là thư mục Home/test-build-desktop

    Click here to enlarge

    Tiếp theo để hiện thị hình ảnh thì ta cần chuyển QImage sang lớp QPixmap sau đó hiển thị các Pixmap trên label (lbl_Image)
    QImage img("qt4.png");
    QPixmap pixmap ;
    pixmap=pixmap.fromImage(img);
    ui->lbl_Image->setPixmap(pixmap);
    Đến đây bạn có thể xem kết quả của mình rồi

    Click here to enlarge


    CHỦ ĐỀ TƯƠNG TỰ:

    Last edited by tuylipden; 19-09-11 at 20:57.
    vdtk3, bqviet, pk1783 người nữa đã cảm ơn nội dung này.

  2. #2
    Thành viên tích cực quangtn82's Avatar
    Tham gia
    Nov 2009
    Bài viết
    250
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    QT SDK đã bao gồm cả QT Creator rồi, chỉ cần cài xong gói SDK là bạn có thể sử dụng ngay, khôn cần down và cài thêm QT Creator nữa

    bqviet đã cảm ơn nội dung này.

  3. #3
    Thành viên mới tuylipden's Avatar
    Tham gia
    Sep 2011
    Bài viết
    13
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Trong gói SDK chỉ là bản QT Creator tích hợp thôi. Còn bản bạn down ngoài là bản mới nhất mà. Nếu như bạn đã mất công down bản mới nhất thì tội gì không sử dụng tất cả là mới nhất. Mình cũng đã có trường hợp biên dịch với bản Qt tích hợp theo nhưng không thể biên dich được vì một số chức năng báo lỗi. Nhưng khi down bản ở ngoài về lại biên dịch thành công


  4. #4
    Thành viên tích cực quangtn82's Avatar
    Tham gia
    Nov 2009
    Bài viết
    250
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Bản tích hợp luôn là bản mới nhất, nếu bạn có đọc tài liệu hướng dẫn của SDK thì sẽ thấy như vậy. Và khi đóng gói thành SDK thì sẽ luôn là bản ổn định nhất rồi, không thể có trường hợp không thể biên dịch được vì một số chức năng báo lỗi trừ khi bạn cấu hình sai.
    Đây là mình nói đến bản SDK down trên trang web của QT chứ không nói đến bản tích hợp của Ubuntu, vì mình dùng Fedora chứ không dùng Ubuntu


  5. #5
    Thành viên tích cực fly_1304's Avatar
    Tham gia
    Sep 2009
    Bài viết
    285
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    em hỏi ngu tý:cái này ứng dụng vào mảng nhúng ah bác,học cái này khó không ạ??

    ĐẠI HỌC SƯ PHẠM KỸ THUẬT I

    Nợ cha một sự nghiệp - Nợ mẹ một nàng dâu

  6. #6
    Thành viên tích cực quangtn82's Avatar
    Tham gia
    Nov 2009
    Bài viết
    250
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Click here to enlarge Nguyên văn bởi fly_1304 Click here to enlarge
    em hỏi ngu tý:cái này ứng dụng vào mảng nhúng ah bác,học cái này khó không ạ??
    Cái này bạn dùng lập trình cho PC hay thiết bị nhúng đều được, bản chất của nó cũng là C++ thôi, học rất dễ, có thể tự học qua các ví dụ của nó và tài liệu hướng dẫn đi kèm


  7. #7
    Thành viên mới tuylipden's Avatar
    Tham gia
    Sep 2011
    Bài viết
    13
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Click here to enlarge Nguyên văn bởi quangtn82 Click here to enlarge
    Bản tích hợp luôn là bản mới nhất, nếu bạn có đọc tài liệu hướng dẫn của SDK thì sẽ thấy như vậy. Và khi đóng gói thành SDK thì sẽ luôn là bản ổn định nhất rồi, không thể có trường hợp không thể biên dịch được vì một số chức năng báo lỗi trừ khi bạn cấu hình sai.
    Đây là mình nói đến bản SDK down trên trang web của QT chứ không nói đến bản tích hợp của Ubuntu, vì mình dùng Fedora chứ không dùng Ubuntu
    Sr. Mình hiểu nhầm. Đúng là bản SDK đã tích hợp luôn bản Qt Creator mới nhất. Mình thì vẫn quen sử dụng bản tích hợp của ubuntu thôi. Thấy chức năng của nó cũng khá đủ rồi. Mà bạn nói chuyện cấu hình sai là sao ? Phần này mình chưa rõ nắm. Bạn có thể nói rõ một số phần về cấu hình không ?
    Lần trước mình bị lỗi code là do code đó được viết trên bản SDK. Nên trong bản tích hợp của ubuntu nó bị thiếu một số module.


  8. #8
    Thành viên tích cực quangtn82's Avatar
    Tham gia
    Nov 2009
    Bài viết
    250
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Click here to enlarge Nguyên văn bởi tuylipden Click here to enlarge
    Sr. Mình hiểu nhầm. Đúng là bản SDK đã tích hợp luôn bản Qt Creator mới nhất. Mình thì vẫn quen sử dụng bản tích hợp của ubuntu thôi. Thấy chức năng của nó cũng khá đủ rồi. Mà bạn nói chuyện cấu hình sai là sao ? Phần này mình chưa rõ nắm. Bạn có thể nói rõ một số phần về cấu hình không ?
    Lần trước mình bị lỗi code là do code đó được viết trên bản SDK. Nên trong bản tích hợp của ubuntu nó bị thiếu một số module.
    Ý mình nói cấu hình sai là bạn lựa chọn thiếu một số module khi cài hoặc không chèn module cần thiết vào file .pro
    Bản tích hợp của Ubuntu thường không mới và không đầy đủ, với cả nếu dùng bản tích hợp của Ubuntu và cài thêm QT Creator cũng không giải quyết được vấn đề, vì QT Creator chỉ là IDE, không phải là core của QT
    Bạn viết ứng dụng trên máy tính nhúng dạng PC (chip Intel) hay dùng chip nào?


  9. #9
    Thành viên mới tuylipden's Avatar
    Tham gia
    Sep 2011
    Bài viết
    13
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Mình viết trên máy tính nhúng dạng PC thôi. Về phần truyền video thời gian thực này hiện tại hướng của mình là capture hình ảnh từ WC (Dùng opencv)> Nén vài frame (Dùng ffmpeg ) > Truyền đi. Hiện tại mình đã hoàn thành việc truyền đi. Khoảng 100ms mình truyền đi 2 frame. Khổ một nỗi mình dùng UDP để truyền, cái ffmpeg nó nén frame theo chuẩn MPEG-4. Nếu rớt một gói thôi là đứt luôn cả file, không thể hiển thị được. Mình nghĩ mãi mà chưa tìm ra cách khắc phục.

    Một số bài viết tiếp theo mình sẽ đưa ra những gì mình đã làm. Có thể công cụ và code chưa tối ưu. Mong anh em cùng giúp đỡ


  10. #10
    Thành viên mới tuylipden's Avatar
    Tham gia
    Sep 2011
    Bài viết
    13
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Để capture hình ảnh từ camera trước tiên cần phải tìm một công cụ tích hợp, hình như trong Qt cũng có một cái tool về camera này thì phải. Nhưng mà khó dùng ( có đợt mình cũng thử nhưng chẳng chạy được cái gì ). Vì vậy mình xài Opencv để lấy hình ảnh từ camera về. Cái này có điểm lợi là lấy hình ảnh khá dễ do opencv mạnh mà Click here to enlarge. Nhưng thiệt là hình ảnh lấy về được là kiểu IplImage. Kiểu ảnh này là dạng ảnh của opencv và tất nhiên là Qt nó bó tay luôn. Nên mình phải dùng một hàm để chuyển sang kiểu QImage của QT. Khi thực hiện bước này xong thì bài toán đã trở về ví dụ 1 rồi

    Bước 1 : Cài đặt opencv và tích hợp vào Qt

    Bạn nào sử dụng ubuntu thì đơn giản rùi. Các bạn vào System >Administration > Synaptic Package Manager. Trong ô search gõ opencv. Bỏ 2 cái đầu và cái cuối còn đâu bạn chọn hết rồi ấn Apply để cài đặt

    Click here to enlarge

    Tiếp theo là add các thư viện của opencv vào Qt.
    Khi tạo Project của Qt có xuất hiện một file .pro, file này sẽ quyết dịnh việc sử dụng module nào, thư viện nào cho Qt. Để add opencv vào project của Qt bạn thêm các lệnh sau vào file .pro

    LIBS += -L/usr/local/include/opencv -lcv
    LIBS += -L/usr/local/include/opencv -lhighgui
    Bước 2 : Capture hình ảnh kiểu IplImage
    Mình sẽ tạo 1 class mới để capture hình ảnh. Trong project các bạn click chuột phải vào phần tên project, của mình ở đây vẫn là test. Sau đó bạn chọn Add new.... Bạn chọn C++ Class và ấn Choose.... Bạn đặt tên cho class. Ở đây mình đặt tên là "Camera" và chọn Base class là QWidget. Chọn Finish để kết thúc.

    Sử dụng các hàm sau để lấy ảnh
    CvCapture * camera = cvCreateCameraCapture(-1);
    //Khởi tạo camera
    IplImage *pSaveImg = cvQueryFrame(camera);
    // Lấy frame từ camera


    Bước 3 : Chuyển kiểu IplImage sang QImage

    Mình dùng hàm sau để chuyển kiểu

    void putImage(IplImage *);
    void sipLCA:Click here to enlargeutImage(IplImage *cvimage)//chuyen tu kieu IplImage sang QImage
    {
    int cvIndex, cvLineStart;

    switch (cvimage->depth) {
    case IPL_DEPTH_8U: //lua chon chieu sau cua 1 kenh co ban
    switch (cvimage->nChannels)
    {
    case 3: //lua chon 3 kenh co ban
    if ( (cvimage->width != image_temp.width()) || (cvimage->height != image_temp.height()) )
    {
    QImage temp(cvimage->width, cvimage->height, QImage::Format_RGB32);
    image_temp = temp;
    } //chuyen doi chieu rong chieu cao dinh dang anh tu opencv sang qimage

    cvIndex = 0; cvLineStart = 0;

    for (int y = 0; y < cvimage->height; y++)
    {
    unsigned char red,green,blue;
    cvIndex = cvLineStart;

    for (int x = 0; x < cvimage->width; x++)
    {
    red = cvimage->imageData[cvIndex+2];
    green = cvimage->imageData[cvIndex+1];
    blue = cvimage->imageData[cvIndex+0];

    image_temp.setPixel(x,y,qRgb(red, green, blue));
    cvIndex += 3;
    }

    cvLineStart += cvimage->widthStep; //sao chep cac diem anh tu opencv sang qimage
    }
    break;
    }
    break;
    }
    }
    Đến đây thì bài toán đã quay về vd 1 rồi Click here to enlarge

    Last edited by tuylipden; 20-09-11 at 23:09.
    plain, xdienmamthoi đã cảm ơn nội dung này.

Trang 1/2 12 cuốicuối

Quyền Sử Dụng Ở Diễn Ðàn

  • Bạn không được gửi luồng mới
  • Bạn không được trả lời bài viết
  • Bạn không được gửi file đính kèm
  • Bạn không được sửa bài viết của mình
  •