2

私は現在、ラズベリー pi (B) でモノラル ランタイムを使用しています。Windows デスクトップに Visual Studio Express 2012 を使用しています。私が基本的に達成したいのは、一連の写真をウェブカメラ (Logitech C270) から .jpg ファイルに保存することです。

私が必要としているだけのプロジェクトを見つけました: http://www.raspberry-sharp.org/romain-flechner/2012/10/projects/use-a-webcam-plugged-in-a-raspberry-pi -with-mono-in-c-using-raspberrycam/ そこで、NuGet 経由でプロジェクトにインストールし、コード サンプルをコピーしました。

Cameras cameras = Cameras.DeclareDevice()
.Named(“Camera 1″).WithDevicePath(“/dev/video0″)
.Memorize();

cameras.Get(“Camera 1″).SavePicture(new PictureSize(640, 480), “/var/www/test.jpg”, 20);

プロジェクトページの説明にあるように、RaspberryCam.so を /lib ディレクトリにコピーしました (そのために /Lib にもコピーしました)。次に、ビルドしたファイル (my.exe、RaspberryCam.dll) を Raspberry PI にダウンロードしました。

ここに私の問題があります。mono でプログラムを実行しようとすると、RaspberryCam.so の DllNotFoundException が発生します。

プロジェクト パスを /etc/ld.so.conf に追加し、ldconfig を実行しましたが、役に立ちません。

また、モノをデバッグ モードで実行してみました (MONO_LOG_LEVEL="debug" MONO_LOG_MASK="dll" mono /var/www/my.exe)。「libRaspberryCam.so」を検索しているように見えるので、/lib/RaspberryCam をコピーしました.so を /lib/libRaspberryCam.so に変更しましたが、それでも何も変わりませんでした。

ところで、私は.soファイルのアクセス権を755に変更しました(ルートの読み取り、書き込み、実行、およびワールドの読み取り、実行)。

正直なところ、私は DLL のインポートについてあまり詳しくないので、ここでばかげた間違いを犯している可能性があります。ただし、先週 raspberrycam プロジェクト ページにコメントを書きましたが、まだ回答がありません。

誰でもこの問題で私を助けることができますか?

ありがとうドミニク

編集: 実際の DLLImport のコードは、Raspberrycam プロジェクト「RaspberryCamInterop.cs」からのものです。

using System;
using System.Runtime.InteropServices;

namespace RaspberryCam.Interop
{
    public class RaspberryCamInterop
    {
        [DllImport("RaspberryCam.so", EntryPoint = "TakePicture")]
        public static extern PictureBuffer TakePicture(string device, uint width, uint height, uint jpegQuantity);

        [DllImport("RaspberryCam.so", EntryPoint = "OpenCameraStream")]
        public static extern IntPtr OpenCameraStream(string device, uint width, uint height, uint fps);

        [DllImport("RaspberryCam.so", EntryPoint = "CloseCameraStream")]
        public static extern void CloseCameraStream(IntPtr src);

        [DllImport("RaspberryCam.so", EntryPoint = "ReadVideoFrame")]
        public static extern PictureBuffer ReadVideoFrame(IntPtr src, uint jpegQuantity);

        [DllImport("RaspberryCam.so", EntryPoint = "GrabVideoFrame")]
        public static extern PictureBuffer GrabVideoFrame(IntPtr src);
    }
}

編集 2: ソフト フロート ウィージーに問題があるようです。これで、標準の hard-float raspbian をインストールしました (プロジェクト ページのガイドに書かれているとおりです: http://www.raspberry-sharp.org/eric-bezine/2012/10/mono-framework/installing-mono -raspberry-pi/ ) で動作しますが、それほど高速ではありませんが、画像は保存されます。mono が ARM hard-float abi と互換性がないにもかかわらず、hard-float raspbian イメージを使用したことに少しイライラします。mono インストール ガイドでは、hard-float パッチについても言及されていません。また、RaspberryCam プロジェクトのソース コードでいくつかの回避策を見つけたので、ハード フロート abi での mono の実行に関連するバグに気付きました。

「PicturesCache.cs」のスニペット

//Timespan bug with ARM version of MONO, so we will use int in milliseconds
private readonly int duration;

ただし、ソフトフロート wheezy に固執し、いくつかのシェル スクリプトと連携して uvccapture というツールを使用して作業を行います。

それでも、あなたからのアドバイスや解決策に感謝しています。

4

3 に答える 3

0

で試しましたか

$sudo make
$sudo make install

?

RaspberryCam.so へのアクセス権を確認し、chmod に修正します。

さよなら

于 2013-09-17T11:19:49.327 に答える
0

同じ例外があり、RaspberryCam.so を (ルート /lib ではなく) /usr/lib にコピーすることで解決しました。

于 2015-03-24T07:27:14.673 に答える