I was doing exactly the same thing, but my scene takes a lot more time to render, on top of my old machine to work on.
So I used to check all the vertices of all the objects, if they are visible or not.
First I would parse a single object in my scene, and check how many of the vertices are visible to camera(assuming the objects isn't occluded even a bit), second things is out of all those vertices, I did check how many vertices are actually visible(not occluded by other objects).
All this is done using just a simple 2d array, which I also described in another question, here.
=> fraction of the object visible in rendered image
=
Actually visible vertices
/ Total vertices supposed to be visible in case of no occlusion
Note: This approach might not be the best, but for the objects which has a good amount of vertices unlike cube/cuboids, this approach would do just fine, as it did for me. As for the computation expense, this is cheaper in comparison of complex scene rendering multiple times because of too many objects existing in it.
Let me know if any of you find any issue in here, it would be better for me as well to know any other flaws in this approach as I am still working with this.